为什么“create table”会产生一个空数据帧?

时间:2018-01-13 05:47:27

标签: apache-spark apache-spark-sql

hc.sql("create table emp12(name String)");

res13: org.apache.spark.sql.DataFrame = []

scala> res13.printSchema
root

为什么数据框为空但在Hive数据仓库中检查时是否在Hive中创建了表?

hive> describe emp12;
OK
name                    string

即使我从Spark加载数据,数据也不会转到Hive表。

1 个答案:

答案 0 :(得分:2)

sql方法将查询结果作为DataFrame返回,因此仅对实际返回任何数据的SQL语句有意义。 CREATE TABLE不是其中之一 - 它是一个SQL(逻辑)命令,仅针对其副作用执行,该副作用是在目录中注册表。

如果您想获取该表,则会发出单独的查询:

hc.sql("SELECT * FROM  emp12")

或只是

hc.table("emp12")
  

即使我从Spark加载数据,数据也不会转到Hive表。

这可能是另一个问题的症状,但一般来说你必须记住Spark与Hive不完全兼容,尤其是在使用分区或分区等功能时。