Python PySpark-运行Count()/聚合函数(平均值等)时不一致

Python PySpark-运行Count()/聚合函数(平均值等)时不一致,python,apache-spark,random,pyspark,Python,Apache Spark,Random,Pyspark,你好,, 我有一个ID为的数据帧和该ID的相关四分之一(图中的表1)。我的目标是在一天结束时,随机选择一个ID,而不考虑季度 为了随机选择一个ID,我使用PySpark-rand函数添加Random_Num列,并设置种子值,以便可以复制结果(例如:Random_Num=rand(seed=1234)。添加Random_Num列后(图中的表2),我根据ID和Random_Num对表2进行排序,然后使用-dropDuplicates函数随机选择ID。一旦我运行dropDuplicates,我将在图像

你好,, 我有一个ID为的数据帧和该ID的相关四分之一(图中的表1)。我的目标是在一天结束时,随机选择一个ID,而不考虑季度

为了随机选择一个ID,我使用PySpark-rand函数添加Random_Num列,并设置种子值,以便可以复制结果(例如:Random_Num=rand(seed=1234)。添加Random_Num列后(图中的表2),我根据ID和Random_Num对表2进行排序,然后使用-dropDuplicates函数随机选择ID。一旦我运行dropDuplicates,我将在图像中显示表3

在这一步之后,我会进行其他我不关心的数据处理。最后,我会为每个季度运行聚合函数和计数ID。但是,每次运行它时,我都会得到不同的计数以及相关的聚合统计信息,如平均值。例如,当我运行aggreate时,我会得到例如:季度计数200-3/31/2015). 下一次,我运行相同的代码,2015年3月31日第四季度我得到210

注意-我的数据框中有几百万条记录

我的问题是——我每次运行时都会得到不同的计数——因为我使用的是随机函数(我验证了带有种子值的随机函数每次都生成相同的数字),还是有其他一些我不知道的问题。(仅供参考-我是PySpark的新手)

最后,我发现了两个类似的堆栈溢出问题,讨论的是数据帧的-cache()或persist()。这是唯一的解决办法吗

我感谢您提供的任何指导或帮助

参考:


删除重复项是不确定的,每次运行可能返回不同的结果

如果没有完全删除重复的行,则需要考虑要保留哪些行。根据目标的不同,您可能希望使用“row_number().over(Window.partitionBy(…).orderBy(…)”然后使用“filter('row_number==1')”


这就像pandas dropduplicates一样-如果你查看pandas文档,它默认只保留第一个重复行。我个人认为,有一种方法可以在没有开销的情况下删除100%重复的行,就像spark中我们经常处理大数据一样,但这可能会引起一些混乱。

dropduplicates不是一个确定性函数,可能会在不同的运行中返回不同的结果Hank you@mck!确实是dropduplicates造成了这种差异。我想知道是否有一个列表或文档列出了所有非确定性函数。这对PySpark的新手特别有用。