1

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

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

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

请建议。

4

2 回答 2

4

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

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

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

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

于 2017-09-13T16:15:15.190 回答
4

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

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

于 2017-09-10T19:02:35.237 回答