Spark Hive SQL возвращает пустой фрейм данных

Я использую Glue в качестве своего мета-магазина улья. У меня почасовая работа, которая каждый час записывает файлы в зарегистрированный раздел.

Определение таблицы:

CREATE EXTERNAL TABLE table_name (
column_1 STRING,
column_2 STRING
)
PARTITIONED BY (process_date DATE)
STORED AS PARQUET
LOCATION "s3://bucket/table_name/";
spark.sql("ALTER TABLE table_name ADD IF NOT EXISTS partition(process_date='2019-11-13') 
LOCATION 's3://bucket/table_name/process_date=2019-11-13'")

Расположение s3 для этих разделов и файлов частей:

s3://bucket/table_name/process_date=2019-11-13/hour=00/part-01.parquet
s3://bucket/table_name/process_date=2019-11-13/hour=00/part-02.parquet
s3://bucket/table_name/process_date=2019-11-13/hour=01/part-01.parquet
s3://bucket/table_name/process_date=2019-11-13/hour=01/part-02.parquet

Я понимаю, что если я добавлю hour=00 и hour=01 в расположение раздела, он будет работать в Spark sql. Но таким образом данные можно запрашивать через Hive, но не через Spark sql.

Я также пробовал добавить эти confs в свою искровую оболочку, но не повезло.

"spark.hadoop.mapreduce.input.fileinputformat.input.dir.recursive=true"
"spark.hadoop.hive.mapred.supports.subdirectories=true"

person collarblind    schedule 24.04.2020    source источник
comment
какую версию Spark вы используете?   -  person Srinivas    schedule 24.04.2020
comment
Spark 2.4.4 на ЭМР-5.27.0   -  person collarblind    schedule 24.04.2020


Ответы (2)


Протестировал сценарий, создав таблицу, похожую на вашу, и конфигурация ниже у меня сработала:

Первый подход: sqlContext.setConf("spark.sql.hive.convertMetastoreParquet", "false")

Тогда это: sqlContext.setConf("mapred.input.dir.recursive","true"); sqlContext.setConf("spark.sql.parquet.binaryAsString", "true")

Вы можете узнать больше здесь: [1] https://home.apache.org/~pwendell/spark-nightly/spark-branch-2.2-docs/latest/sql-programming-guide.html#hive-metastore-parquet-table-conversion

person Eman    schedule 24.04.2020

Я думаю, что вы сделали, что вы включили каталог Glue в hive-site.xml, но не в spark-hive-site.xml.

В вашей классификации также должен быть раздел ниже:

[ { "Classification": "spark-hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory" } }, ]

ссылка: [1] https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-glue.html

person Eman    schedule 24.04.2020
comment
У меня он включен. Я могу запросить все таблицы, но опубликованная возвращает пустой фрейм данных в Spark sql, но не в улье - person collarblind; 24.04.2020