【发布时间】:2018-02-09 12:50:24
【问题描述】:
假设我使用 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 |
+------+--+
spark 似乎看不到 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 是使用非标准位置参数创建的 hive 数据库
- 集群是 完全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
【问题讨论】:
-
您的 sparksession 是否是使用 enableHivesupport 创建的。您在 spark 中保存的 dB 名称和在 hive 中的读数看起来不同
-
是的,hive 支持已启用。不同的表名是由于我在创建示例时引入的拼写错误造成的。我更正了这个问题。
-
我认为 Bug 是问题。
标签: apache-spark hive pyspark spark-dataframe