Как читать разделенную таблицу улья через pyspark - PullRequest
1 голос
/ 17 апреля 2019

Новичок в программировании и у него возникли сомнения относительно метода чтения секционированных таблиц с использованием pyspark.

Допустим, у нас есть таблица, разделенная, как показано ниже:

~/$table_name/category=$category/year=$year/month=$month/day=$day

Теперь я хочу прочитать данные из всех категорий, но хочу ограничить данные периодом времени. Есть ли способ указать это с помощью подстановочных знаков, а не записывать все отдельные пути?

Что-то с эффектом

table_path = ["~/$table_name/category=*/year=2019/month=03",
                         "~/$table_name/category=*/year=2019/month=04"]

table_df_raw = spark.read.option(
    "basePath", "~/$table_name").parquet(*table_path)

Кроме того, в качестве бонуса есть более питонский способ указать временные диапазоны, которые могут приходиться на разные годы, а не перечислять пути по отдельности.

Редактировать: Чтобы прояснить некоторые моменты, у меня нет доступа к метасольве улья для этой таблицы, и поэтому я не могу получить доступ только с помощью SQL-запроса. Кроме того, размер данных не позволяет фильтровать после преобразования в dataframe.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Используете ли вы кластер Hortonworks HDP? Если да, попробуйте использовать разъем HiveWarehouse. Это позволяет Spark получить доступ к каталогу Hive. После этого вы можете выполнить любую команду Spark SQL над таблицами кустов: https://community.hortonworks.com/articles/223626/integrating-apache-hive-with-apache-spark-hive-war.html

Если вы не используете Hortonworks, я предлагаю вам посмотреть по этой ссылке: https://acadgild.com/blog/how-to-access-hive-tables-to-spark-sql

0 голосов
/ 17 апреля 2019

Вы можете попробовать это

Подстановочные знаки также можно использовать для указания диапазона дней:


table_df_raw = spark.read
                    .option("basePath", "~/$table_name")
                    .parquet("~/$table_name/category=*/year=2019/month={3,4,8}")

или


table_df_raw = spark.read
                    .option("basePath", "~/$table_name")
                    .parquet("~/$table_name/category=*/year=2019/month=[3-4]")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...