【问题标题】:Spark returns Empty DataFrame but Populated in HiveSpark 返回 Empty DataFrame 但填充在 Hive 中
【发布时间】:2018-08-14 07:54:18
【问题描述】:

我在蜂巢中有一张桌子

db.table_name

当我在 hive 中运行以下命令时,我会返回结果

SELECT * FROM db.table_name;

当我在 spark-shell 中运行以下命令时

spark.read.table("db.table_name").show

它什么也没显示。同样

sql("SELECT * FROM db.table_name").show

也没有显示。在显示之前选择任意列也不会显示任何内容。执行计数状态表有 0 行。

对同一数据库中的其他表运行相同的查询。

Spark 版本:2.2.0.cloudera1

表是使用

创建的
table.write.mode(SaveMode.Overwrite).saveAsTable("db.table_name")

如果我直接使用 parquet 文件读取文件,它就可以工作。

spark.read.parquet(<path-to-files>).show

编辑: 我目前正在通过描述表格并获取位置并使用 spark.read.parquet 来使用解决方法。

【问题讨论】:

  • 您是在使用 HiveContext(如果是 Spark 1.6)还是打电话给 .enableHiveSupport()(如果是 Spark 2.x)?
  • 使用 spark2-shell,我相信它可以在设置会话时启用 hive 支持。
  • 日志可用吗?你有没有在那里寻找可能的错误/警告?
  • 由于它是客户端模式,所有错误/警告都会记录到 shell。不会显示任何日志。
  • 也许您可以从 Spark UI 或资源管理器获取日志?

标签: apache-spark hive apache-spark-sql


【解决方案1】:

您是否刷新了元数据表?也许您需要刷新表才能访问新数据。

spark.catalog.refreshTable("my_table")

【讨论】:

  • 这没有帮助,它仍然产生相同的结果。
【解决方案2】:

我通过使用解决了这个问题

query_result.write.mode(SaveMode.Overwrite).format("hive").saveAsTable("table")

将结果存储在文本文件中。 可能与 Hive 镶木地板有些不兼容。

我还发现了一份关于它的 Cloudera 报告 (CDH Release Notes):他们建议手动创建 Hive 表,然后从临时表或通过查询加载数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2021-03-29
    相关资源
    最近更新 更多