【发布时间】:2021-10-23 14:28:07
【问题描述】:
使用spark将df写入hdfs:
df.write.partitionBy("date").mode("append").format("ORC").save("/tmp/table1")
在此之上创建 Hive 外部表 (default.table1)
我可以使用直线阅读这个表格。
select * from default.table1; --> works fine
我可以使用 spark 读取此文件夹
spark.read.orc("/tmp/table1").show() # --> works fine
但是,当我使用 spark 读取这个配置单元表时,我得到了错误:
spark.sql("select * from default.table1").show() # --> error
当我计算这张表时,它也可以正常工作:
spark.sql("select count(*) from default.table1").show() # --> works fine
另外,当我将 spark df 作为 csv 写入 hdfs 时,我将其读取为 spark.sql (hive) 没有问题
以下是错误信息:
“Py4JJavaError: 调用 0192.showString 时出错。”
【问题讨论】:
-
为什么要写一个文件并在上面创建一个外部表?你为什么不直接创建表?
df.write.saveAsTable("default.table1", mode="append", format="orc", partitionBy="date", path="/tmp/table1") -
当我这样做时工作正常。当我先写然后在上面创建表格时它不工作的任何原因?
-
spark 和 Hive Metastore 之间可能存在问题。错误信息的完整日志中可能有一些线索。
An error occurred完全抽象且无用... -
谢谢@Steven。我设法解决了这个问题。问题出在我的 create table 语句上。我错过了这一行:“WITH SERDEPROPERTIES .....”
标签: python pyspark hive apache-spark-sql orc