Spark HiveContext:插入覆盖读取的相同 table

Spark HiveContext : Insert Overwrite the same table it is read from

我想在 HiveContext 中使用 PySpark 应用 SCD1 和 SCD2。在我的方法中,我正在读取增量数据和目标 table。阅读后,我加入他们的 upsert 方法。我正在对所有源数据帧执行 registerTempTable。我正在尝试将最终数据集写入目标 table,但我面临的问题是无法在读取的 table 中插入覆盖。

请为此提出一些解决方案。我不想将中间数据写入物理 table 并再次读取它。

是否有任何 属性 或方法来存储最终数据集而不保持对从中读取的 table 的依赖性。这样,就有可能覆盖 table.

请推荐。

您永远不应该覆盖您正在阅读的 table。如果发生故障,它可能会导致数据损坏和完全丢失之间的任何结果。

同样重要的是要指出正确实施的 SCD2 不应该永远覆盖整个 table 并且可以作为(主要)追加操作实施。据我所知,如果没有 mutable 存储,SCD1 无法有效实现,因此不适合 Spark。

我正在浏览 spark 的文档,当我在那里检查一个 属性 时突然想到了一个想法。

由于我的 table 是镶木地板,我通过将此 属性 设置为 false 来使用配置单元元存储来读取数据。

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

这个解决方案对我来说效果很好。