使用分区写入配置单元表时出错

Posted

技术标签:

【中文标题】使用分区写入配置单元表时出错【英文标题】:Error while writing hive table with partition 【发布时间】:2018-02-01 10:25:08 【问题描述】:

我正在尝试从 PySpark 编写一个 DF 到 hive:

> new_hub_df.printSchema()
root
 |-- ClientId: string (nullable = true)
 |-- HUB_ID: string (nullable = true)
 |-- publicID: string (nullable = true)
 |-- Version: long (nullable = true)

> new_hub_df.show(2)
+--------+--------------------+--------------------+-------+
|ClientId|              HUB_ID|            publicID|Version|
+--------+--------------------+--------------------+-------+
|    OPNF|49eff2084ecea86e9...|54102364-6251-4bd...|      1|
|    OPNF|bab2e3fae1183ea69...|1f98cca0-316e-4ed...|      1|
+--------+--------------------+--------------------+-------+
only showing top 2 rows

> new_hub_df.write.saveAsTable("sb_party_hub_dev.party_hub", mode='overwrite', format="orc", partitionBy='ClientId')

我可以在 Hive 中看到我的表,但架构不正确:

party_hub

    col (array<string>)

并且选择返回错误:

> select * from party_Hub
java.io.IOException: java.io.IOException: adl://home/hive/warehouse/sb_party_hub_dev.db/party_hub/ClientId=OPNF/part-r-00003-a82a83a9-da1a-41af-97d0-f449bf0e1e69.snappy.orc not a SequenceFile

我该如何解决?

【问题讨论】:

能否请您添加ddl。我删除了帖子。 【参考方案1】:

如何创建一个临时表并将其保存为 ORC。根据需要添加分区。

new_hub_df.registerTempTable("newhub")
sqlContext.sql("CREATE TABLE mytbl STORED AS ORC AS select * from newhub")

【讨论】:

以上是关于使用分区写入配置单元表时出错的主要内容,如果未能解决你的问题,请参考以下文章

获取 Spark 写入 Hive 元存储的所有新分区

尝试在 PySpark 中使用 partitionBy 写入 csv 时出错

通过 Kylin 构建多维数据集创建配置单元表时出错

电脑安装软件时显示无法写入文件是啥意思?

Apache Beam 使用多个表时的写入次数

FlinkFlink kafka producer 分区策略 (flink写入数据不均匀 与 数据写入 分区无数据 )