spark-如何处理源表可能更改的Dataframe

9w11ddsr  于 2021-07-14  发布在  Spark
关注(0)|答案(0)|浏览(137)

可能是个无稽之谈,所以请事先原谅我。
我们在Hadoop3.1.1和oozie上使用Spark2.3.2(scala),每15分钟运行一次工作流。
我们大部分都有存储为orc的外部表。其中一个作业将外部表加载到Dataframe,然后在不同的场合使用它进行不同的分析,因此我们 .persist 一旦我们装上它。
在以前的spark和hadoop版本中,当我们不使用外部表时,hive管理锁,当上面提到的表被更新(通过一个单独的进程)时,流将中断/失败。这种情况一天发生一两次,所以当时没什么大不了的。现在碰巧的是,如果表被更新了,那么如果我们在重写时达到了读取它的最佳点,它可能会变成空的。我们在dataframe上实现了一个计数检查,因此如果它的记录小于arbitrarybusinesslogicnumber,我们将等待,然后再次加载表(仍然检查计数)。
然而,有时空表似乎会偷偷进入并把事情搞砸,即使在持久化加载的非空Dataframe之后也是如此。
我对孩子的行为做了一些测试 .persist 注意到如果源表确实发生了变化,那么Dataframe也会发生变化(即使缓存并触发了 .count ),重新计算。这和stackoverflow的帖子和我读过的其他文章是一致的。
我已经调查过了 checkpoint 但我发现只有复杂的方法可以读回Dataframe,我不确定这是否是一个好的解决方案。
在这种情况下,你有什么建议吗?
谢谢!干杯
1https://stackoverflow.com/questions/62206092/how-to-read-a-checkpoint-dataframe-in-spark-scala

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题