Apache spark 为什么Spark rdd.count()的结果不一致?

Apache spark 为什么Spark rdd.count()的结果不一致?,apache-spark,pyspark,Apache Spark,Pyspark,代码如下。如果我多次运行它,两个rdd.count()调用之间的差异就会改变。我的印象是rdd。过滤器(func)不应该影响原始rdd print(rdd.count()) 8105 print(rdd.filter(lambda d: d['label'] == 1).count()) 3528 print(rdd.count()) 8099 所以…,在下面的注释的基础上,这个rdd是用randomSplit()创建的。RandomSplit()是一种惰性转换,它会在

代码如下。如果我多次运行它,两个rdd.count()调用之间的差异就会改变。我的印象是rdd。过滤器(func)不应该影响原始rdd

print(rdd.count())
    8105
print(rdd.filter(lambda d: d['label'] == 1).count())
    3528
print(rdd.count())
    8099

所以…,在下面的注释的基础上,这个rdd是用randomSplit()创建的。RandomSplit()是一种惰性转换,它会在每个操作上重新计算,例如count()。Zero323建议添加一个种子将消除我的结果中的不确定性。但是,我添加了一个(并且无法找到任何随机函数的任何其他用途),没有任何影响,因此问题仍然存在。

一些上下文将是有用的。如果我们不知道您是如何创建
rdd
的,就无法知道它是如何发生的。这需要1000多行代码。它从一些关系表转储开始。在达到这一点之前,它会进行数据清理、聚合、连接、分解、随机拆分和一些nlp处理。这里是-随机拆分。好吧,这似乎是相关的。但是发生了什么?如果你有一个没有固定种子的随机分割,并且数据没有被缓存,那么你在每个动作上都会得到新的分割。没有什么意外的。一些上下文会很有用。如果我们不知道您是如何创建
rdd
的,就无法知道它是如何发生的。这需要1000多行代码。它从一些关系表转储开始。在达到这一点之前,它会进行数据清理、聚合、连接、分解、随机拆分和一些nlp处理。这里是-随机拆分。好吧,这似乎是相关的。但是发生了什么?如果你有一个没有固定种子的随机分割,并且数据没有被缓存,那么你在每个动作上都会得到新的分割。没什么意外的。