Spark不显示驻留在配置单元表中的数据

时间:2018-02-09 12:50:24

标签: apache-spark hive pyspark spark-dataframe

假设我使用Spark创建下表:

df = spark.createDataFrame([(1, 4), (2, 5), (3, 6)], ["A", "B"])
df.write.mode("overwrite").saveAsTable("hivedb.mwe")

现在,如果我尝试计算此表中的数据:

> spark.sql("SELECT count(*) FROM hivedb.mwe").show()

+--------+
|count(1)|
+--------+
|       0|
+--------+

但是,如果我使用Hive(或Impala,它给出相同的结果)来计算数据

jdbc:hive2:...> SELECT count(*) FROM hivedb.mwe

+------+--+
| _c0  |
+------+--+
| 3    |
+------+--+

这里的火花似乎没有看到mwe中的数据?

作为插件,Spark完全了解该表:

> spark.sql("DESCRIBE hivedb.mwe").show()

+--------+---------+-------+
|col_name|data_type|comment|
+--------+---------+-------+
|       A|   bigint|   null|
|       B|   bigint|   null|
+--------+---------+-------+

为了完整性:

  • Spark版本:v2.2.0.cloudera1
  • hivedb是使用非标准位置参数
  • 创建的配置单元数据库
  • 群集是 完全kerberized
  • HDFS包含:

    [myuser@cluster~]$ hdfs dfs -ls /path/to/hivedb/mwe
    Found 3 items
    -rw-r--r--   3 myuser somegroup          0 2018-02-09 13:29 /path/to/hivedb/mwe/_SUCCESS
    -rw-r--r--   3 myuser somegroup          526 2018-02-09 13:29 /path/to/hivedb/mwe/part-00000-f1e79c0d-fca5-4a46-aa70-3651baa96a90-c000.snappy.parquet
    -rw-r--r--   3 myuser somegroup          545 2018-02-09 13:29 /path/to/hivedb/mwe/part-00001-f1e79c0d-fca5-4a46-aa70-3651baa96a90-c000.snappy.parquet
    

1 个答案:

答案 0 :(得分:3)

它似乎是cloudera 2.2中的一个已知问题。

<强> https://www.cloudera.com/documentation/spark2/latest/topics/spark2_known_issues.html#SPARK-21994

提供最佳替代解决方案,您可以查看上述链接并执行解决方案并查看解决方案。

这些是解决方案

val options = Map("path" -> "/path/to/hdfs/directory/containing/table")
df.write.options(options).saveAsTable("db_name.table_name")

spark.sql("alter table db_name.table_name set SERDEPROPERTIES ('path'='hdfs://host.example.com:8020/warehouse/path/db_name.db/table_name')")
spark.catalog.refreshTable("db_name.table_name")