【问题标题】:PySpark: Not able to read hive orc table using spark.sqlPySpark:无法使用 spark.sql 读取 hive orc 表
【发布时间】: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


【解决方案1】:

通过修复 hive ddl 设法解决了问题。

必须包含该行

“WITH SERDEPROPERTIES ...”以确保 hiveContext 能够读取 spark 中的数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多