PySpark insertInto 覆盖

for*_*man 1 python hive apache-spark pyspark

我正在尝试将数据框中的数据插入到 Hive 表中。我已经能够成功地使用 df.write.insertInto("db1.table1", overwrite = True).

我只是对这个overwrite = True部分有点困惑——我尝试多次运行它,它似乎是附加的,而不是覆盖的。文档中没有太多内容,但是我什么时候应该将覆盖设置为Falsevs. True

Shu*_*Shu 6

df.insertInto仅当table already exists在 hive 中时才有效。

df.write.insertInto("db.table1",overwrite=False)append数据转移到现有的 hive 表中。

df.write.insertInto("db.table1",overwrite=True)overwritehive 表中的数据。

例子:

df.show()
#+----+---+                                                                                                                                                                              
#|name| id|
#+----+---+
#|   a|  1|
#|   b|  2|
#+----+---+

#save the table to hive
df.write.saveAsTable("default.table1")

#from hive
#hive> select * from table1;
#OK
#a       1
#b       2

df.write.insertInto("moch.table1",overwrite=True)

#from hive
#hive> select * from table1;
#OK
#a       1
#b       2

#appending data to hive
df.write.insertInto("moch.table1",overwrite=False)

#from hive
#hive> select * from table1;
#OK
#a       1
#b       2
#a       1
#b       2
Run Code Online (Sandbox Code Playgroud)

  • 感谢有用的用户。改进示例的一个小建议是使用不同的数据帧来演示“df.write.insertInto("moch.table1",overwrite=True)”。目前,尚不清楚表本身是否被覆盖或重复行是否被更新。 (3认同)
  • 如何插入未创建 Hive 表的 S3 位置?ETL作业只是将数据加载到S3以供下游进程使用,但不需要创建表 (2认同)
  • 当输出表被分区时会发生什么?它会覆盖整个表还是仅覆盖分区? (2认同)