【问题标题】:Spark Hive SQL is Returning Empty DataframeSpark Hive SQL 返回空数据框
【发布时间】:2020-08-07 13:18:05
【问题描述】:

我使用 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=00hour=01 添加到分区位置,它将在 spark sql 中工作。但是通过这种方式,数据可以通过 Hive 查询,但不能通过 spark sql 查询。

我也尝试将这些配置文件添加到我的 spark-shell 中,但没有成功。

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

【问题讨论】:

  • 你用的是什么版本的spark?
  • EMR-5.27.0 上的 Spark 2.4.4

标签: apache-spark hive amazon-emr aws-glue


【解决方案1】:

通过创建一个类似于你的表来测试场景,下面的配置对我有用:

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

【讨论】:

    【解决方案2】:

    我认为您所做的是在 hive-site.xml 中启用了 Glue 目录,但在 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

    【讨论】:

    • 我已启用它。我可以查询所有表,但发布的表在 spark sql 中返回一个空数据框,但在 hive 中却没有
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 2017-07-17
    • 2021-05-13
    • 2017-09-02
    • 1970-01-01
    • 2022-01-02
    相关资源
    最近更新 更多