spark hivecontext:insert覆盖从中读取的同一个表

50pmv0ei  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(410)

我想在hivecontext中使用pyspark应用scd1和scd2。在我的方法中,我读取增量数据和目标表。看完后,我加入了他们的行列。我正在对所有源Dataframe执行registertemptable。我正在尝试将最终的数据集写入目标表,我面临的问题是,在从中读取数据集的表中,插入覆盖是不可能的。
请提出一些解决办法。我不想将中间数据写入物理表并再次读取。
是否有任何属性或方法来存储最终数据集,而不保留对从中读取的表的依赖关系。这样,就有可能覆盖表。
请建议。

5w9g7ksd

5w9g7ksd1#

我正在浏览spark的文档,当我查看那里的一处房产时,我突然想到了一个想法。
由于我的表是parquet,我使用hivemetastore通过将这个属性设置为false来读取数据。

hiveContext.conf("spark.sql.hive.convertMetastoreParquet","false")

这个解决方案对我很有效。

20jt8wwn

20jt8wwn2#

决不能覆盖正在读取的表。它可能导致数据损坏和故障时完全丢失数据之间的任何情况。
同样重要的是要指出,正确实现的scd2永远不应该覆盖整个表,并且可以实现为(大部分)追加操作。据我所知,如果没有可变存储,scd1就无法有效地实现,因此不适合spark。

相关问题