gpt4 book ai didi

apache-spark - 在 Spark 的 saveAsTable 上

转载 作者:行者123 更新时间:2023-12-05 08:54:04 26 4
gpt4 key购买 nike

我们正在尝试从 SPARK 写入 HIVE 表,我们正在使用 saveAsTable 函数。我想知道 saveAsTable 是否每次都删除并重新创建配置单元表?如果这样做,那么是否有任何其他可能的 spark 函数实际上只是截断并加载一个表,而不是删除并重新创建。

最佳答案

这取决于您指定的 .mode 值

overwrite --> then spark drops the table first then recreates the table

append --> insert new data to the table

1.如果存在则删除/如果不存在则创建default.spark1 parquet格式的表

>>> df.write.mode("overwrite").saveAsTable("default.spark1")

2.存在则丢弃/不存在则创建 default.spark1 orc 格式的表

>>> df.write.format("orc").mode("overwrite").saveAsTable("default.spark1")

3.将新数据附加到表中的现有数据(不删除/重新创建表)

>>> df.write.format("orc").mode("append").saveAsTable("default.spark1")

使用 Spark 实现 Truncate 和 Load:

方法一:-

您可以将您的dataframe 注册为临时表,然后执行insert overwrite statement to overwrite target table

>>> df.registerTempTable("temp") --registering df as temptable
>>> spark.sql("insert overwrite table default.spark1 select * from temp") --overwriting the target table.

此方法也适用于内部/外部表。

方法二:-

在内部表的情况下,我们可以先截断表,然后将数据附加到表中,通过使用这种方式,我们不会重新创建表,而只是将数据附加到表中。

>>> spark.sql("truncate table default.spark1")
>>> df.write.format("orc").mode("append").saveAsTable("default.spark1")

此方法仅适用于内部表。

即使在外部表的情况下,我们也可以通过更改表属性来采取一些变通方法来截断表。

假设 default.spark1 表是外部表并且

--change external table to internal table
>>> saprk.sql("alter table default.spark1 set tblproperties('EXTERNAL'='FALSE')")
--once the table is internal then we can run truncate table statement
>>> spark.sql("truncate table default.spark1")
--change back the table as External table again
>>> spark.sql("alter table default.spark1 set tblproperties('EXTERNAL'='TRUE')")
--then append data to the table
>>> df.write.format("orc").mode("append").saveAsTable("default.spark1")

关于apache-spark - 在 Spark 的 saveAsTable 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51390857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com