运行计数命令时出现点火不一致

有关Spark计算不一致的问题。这是否存在?例如,我运行完全一样的命令两​​次,例如:运行计数命令时出现点火不一致

imp_sample.where(col("location").isNotNull()).count() 

而且每次运行它的时候我收到稍有不同的结果(141830,然后142314)! 或者这样:

imp_sample.where(col("location").isNull()).count() 

并获得2587013,然后2586943。这怎么可能? 谢谢!

回答:

根据您的评论,您正在使用sampleBy在您的管道。 sampleBy不能保证你会得到行的确切分数。每个记录包含的分数等于分数,并且可能因样本的概率而异。

关于在评论你的monotonically_increasing_id问题,它只能保证下一个ID比前一个更大的,但是,它并不能保证ID是连续的(I,I + I,I + 2等。 )。

最后,你可以通过persist()来坚持一个数据框。

回答:

好的,我从此遭受重大从此。我有一个七或八阶段的管道,将几个表格归一化,添加了id,加入并分组。同一管道的连续运行给出了不同的结果,尽管不是我能理解的任何连贯模式。长话短说,我将这个功能追溯到我使用函数monotonically_increasing_id,假设解决方案为this JIRA ticket,但在Spark 2.2中仍然很明显。

我不确切知道你的管道是干什么的,但请理解我的修复是强制SPARK在调用monotonically_increasing_id后坚持结果。我开始这样做后再也没有看到这个问题。

让我知道如果明智的坚持解决这个问题。

要保留的RDD或数据帧,呼叫或者df.cache(默认为在内存中的持久性)或df.persist([一些存储水平]),例如

df.persist(StorageLevel.DISK_ONLY) 

再次,这可以不是帮助你,但在我的情况下,它强制Spark刷新并写入id值,这些值在流水线的重复调用时表现得非确定性。

以上是 运行计数命令时出现点火不一致 的全部内容, 来源链接: utcz.com/qa/258314.html

回到顶部