Sha*_*kar 5 hive scala apache-spark-sql spark-dataframe
在附加模式下将DF插入Hive内部表的正确方法是什么.看来我们可以使用"saveAsTable"方法直接将DF写入Hive,或者将DF存储到临时表,然后使用查询.
df.write().mode("append").saveAsTable("tableName")
Run Code Online (Sandbox Code Playgroud)
要么
df.registerTempTable("temptable")
sqlContext.sql("CREATE TABLE IF NOT EXISTS mytable as select * from temptable")
Run Code Online (Sandbox Code Playgroud)
第二种方法会附加记录还是覆盖它?
有没有其他方法可以有效地将DF写入Hive Internal表?
Spc*_*ond 13
这里没有任何选项适用于我/可能已经贬值,因为答案是写的.
根据最新的spark API文档(适用于Spark 2.1),它使用的insertInto()是DataFrameWriter类中的方法
我正在使用Python PySpark API, 但它在Scala中是相同的:
df.write.insertInto(target_db.target_table,overwrite = False)
Run Code Online (Sandbox Code Playgroud)
以上对我有用.
df.saveAsTable("tableName", "append")不推荐使用。相反,您应该使用第二种方法。
sqlContext.sql("CREATE TABLE IF NOT EXISTS mytable as select * from temptable")
Run Code Online (Sandbox Code Playgroud)
如果表不存在,它将创建表。当您第二次运行代码时,您需要删除现有表,否则您的代码将异常退出。
另一种方法,如果您不想删除表。单独创建一个表,然后将数据插入该表。
下面的代码会将数据追加到现有表中
sqlContext.sql("insert into table mytable select * from temptable")
Run Code Online (Sandbox Code Playgroud)
下面的代码将数据覆盖到现有表中
sqlContext.sql("insert overwrite table mytable select * from temptable")
Run Code Online (Sandbox Code Playgroud)
该答案基于Spark 1.6.2。如果您使用的是其他版本的Spark,我建议您检查相应的文档。