【发布时间】:2019-04-04 06:21:33
【问题描述】:
我想随机排序一个数据帧,但以一种确定的方式。我认为这样做的方法是将orderBy 与种子rand 函数一起使用。但是,我发现这在不同的机器上是不确定的。例如,考虑以下代码:
from pyspark.sql import types as T, functions as F
df = spark.createDataFrame(range(10), T.IntegerType())
df = df.orderBy(F.rand(seed=123))
print(df.show())
当我在本地机器上运行它时,它会打印出来
+-----+
|value|
+-----+
| 3|
| 4|
| 9|
| 7|
| 8|
| 0|
| 5|
| 6|
| 2|
| 1|
+-----+
但在 EC2 实例上,它会打印
+-----+
|value|
+-----+
| 9|
| 5|
| 6|
| 7|
| 0|
| 1|
| 4|
| 8|
| 3|
| 2|
+-----+
即使在不同的机器上运行,我如何才能获得确定性的随机排序?
我的 pyspark 版本是 2.4.1
编辑:顺便说一句,我应该补充一点,只是执行df.select(F.rand(seed=123)).show() 会在两台机器上产生相同的输出,所以这是orderBy 和rand 组合的具体问题.
【问题讨论】:
-
你的本地spark版本和EC2实例spark版本是多少?都一样吗?
-
仅供参考,我得到的输出与您的 EC2 相同,我使用的是 pyspark 2.4.1
-
@JimTodd 是的,我的 spark 版本是一样的。
-
JVM版本呢?我得到的结果与 OpenJDK 1.8.0_191 不同
-
@JesseAmano 我的本地机器上有 java 版本 1.8.0_202。
标签: pyspark