Spark Have SQL返回空数据帧 [英] Spark Hive SQL is Returning Empty Dataframe

查看:0
本文介绍了Spark Have SQL返回空数据帧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用胶水作为我的母公司元存储。我有一个每小时向注册分区写入文件的每小时作业。

表定义:

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=00hour=01添加到分区位置,它将在Spark SQL中工作。但通过这种方式,数据可以通过配置单元查询,但不能通过Spark SQL查询。

我也试过将这些Conf添加到我的火花壳中,但没有成功。

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

推荐答案

通过创建与您的表类似的表测试了该方案,下面的配置对我有效:

第一套: 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

这篇关于Spark Have SQL返回空数据帧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆