Spark 不使用 Hive 分区外部表中的分区信息
Posted
技术标签:
【中文标题】Spark 不使用 Hive 分区外部表中的分区信息【英文标题】:Spark not using partition information from Hive partitioned external table 【发布时间】:2020-01-21 07:23:05 【问题描述】:我有一个复杂/嵌套的 Hive-External 表,它是在 HDFS 之上创建的(文件为 avro 格式)。当我运行 hive 查询时,它会显示所有记录和分区。
但是当我在 Spark 中使用同一张表时:
val df = spark
.read
.format("avro")
.load("avro_files")
.option("avroSchema", Schema.toString)
它不显示分区列。
但是,当我使用spark.sql("select * from hive_External_Table")
时,它很好,我可以看到它
在创建的数据框中,但问题是我无法手动传递提供的架构。
请注意,当我查看数据时,分区列不是底层保存数据的一部分,但是当我通过 Hive 查询表时可以看到它。我在尝试加载时也可以看到分区列使用 pyspark 的 avro 文件:
df = ( sqlContext.read.format("com.databricks.spark.avro").option("avroSchema", pegIndivSchema).load('avro_files'))
所以我想知道它是什么样的?
【问题讨论】:
【参考方案1】:请检查您在选项架构部分中使用的Schema.toString
值中存在的列。它将缺少分区列。
还可以尝试使用您在 pyspark 代码中使用的相同架构。
option("avroSchema", pegIndivSchema)
【讨论】:
以上是关于Spark 不使用 Hive 分区外部表中的分区信息的主要内容,如果未能解决你的问题,请参考以下文章
Hive 不读取 Spark 生成的分区 parquet 文件