将Spark数据框保存到Hive:table不可读,因为"镶木地板不是SequenceFile"

Ale*_*ord 9 hive apache-spark apache-spark-sql pyspark

我想使用PySpark将Spark(v 1.3.0)数据框中的数据保存到Hive表中.

文件规定:

"spark.sql.hive.convertMetastoreParquet:当设置为false时,Spark SQL将使用Hive SerDe作为镶木桌而不是内置支持."

看看Spark教程,似乎可以设置这个属性:

from pyspark.sql import HiveContext

sqlContext = HiveContext(sc)
sqlContext.sql("SET spark.sql.hive.convertMetastoreParquet=false")

# code to create dataframe

my_dataframe.saveAsTable("my_dataframe")
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试查询Hive中保存的表时,它返回:

hive> select * from my_dataframe;
OK
Failed with exception java.io.IOException:java.io.IOException: 
hdfs://hadoop01.woolford.io:8020/user/hive/warehouse/my_dataframe/part-r-00001.parquet
not a SequenceFile
Run Code Online (Sandbox Code Playgroud)

如何保存表格,使其在Hive中立即可读?

Lee*_*con 16

我一直在那里......
API在这方面有点误导.
DataFrame.saveAsTable没有创建一个蜂巢表,但内部星火表源.
它还将一些东西存储到Hive Metastore中,但不是你想要的东西.
句话是关于Spark 1.3的spark-user邮件列表.

如果您希望从Spark创建Hive表,可以使用以下方法:
1.Create Table ...通过SparkSQL使用Hive Metastore.
2. DataFrame.insertInto(tableName, overwriteMode)用于实际数据(Spark 1.3)