在append模式下向配置单元内部表插入df的正确方法是什么。似乎我们可以使用“saveastable”方法直接将df写入hive,或者将df存储到temp表,然后使用查询。
df.write().mode("append").saveAsTable("tableName")
或
df.registerTempTable("temptable")
sqlContext.sql("CREATE TABLE IF NOT EXISTS mytable as select * from temptable")
第二种方法是追加记录还是覆盖记录?
有没有其他方法可以有效地将df写入hive内部表?
3条答案
按热度按时间7lrncoxx1#
您还可以插入并覆盖正在插入的分区,您可以使用动态分区来完成。
owfi6suc2#
这两个选项对我都不起作用/可能因为答案写好而贬值了。
根据最新的sparkapi文档(对于spark2.1),它使用
insertInto()
方法从DataFrameWriter
班我使用的是python pyspark api,但在scala中是相同的:
以上这些对我很有用。
hgncfbus3#
df.saveAsTable("tableName", "append")
已弃用。相反,你应该选择第二种方法。如果表不存在,它将创建表。第二次运行代码时,需要删除现有表,否则代码将异常退出。
另一种方法,如果你不想放弃表。分别创建一个表,然后将数据插入该表。
下面的代码将把数据附加到现有表中
下面的代码将覆盖现有表中的数据
这个答案基于spark 1.6.2。如果您使用的是spark的其他版本,我建议您检查相应的文档。