Спасибо за дополнительную информацию от вашего редактирования!Это оказалось довольно важной подсказкой.
Проблема
Я думаю проблема здесь в том, что вы присоединяете псевдослучайно сгенерированный столбец к уже случайно выбранномуупорядоченный набор данных, и существующая случайность не является детерминированной, поэтому присоединение другого источника случайности, который является детерминированным, не помогает.
Вы можете проверить это, перефразировав свой вызов orderBy
как:
df.withColumn('order', F.rand(seed=123)).orderBy(F.col('order').asc())
Если я прав, вы увидите одинаковые случайные значения на обеих машинах, но они будут прикреплены к разным строкам: порядок, в котором случайные значения прикрепляются к строкам, является случайным!
Решение
И если это правда, решение должно быть довольно простым: применить детерминистическое неслучайное упорядочение над «реальными» значениями, прежде чем применять случайный (но все еще детерминированный) порядок дляtop.
df.orderBy(F.col('value').asc()).withColumn('order', F.rand(seed=123)).orderBy(F.col('order').asc())
должен выдавать одинаковый вывод на обеих машинах.Мой результат:
+-----+-------------------+
|value| order|
+-----+-------------------+
| 4|0.13617504799810343|
| 5|0.13778573503201175|
| 6|0.15367835411103337|
| 9|0.43774287147238644|
| 0| 0.5029534413816527|
| 1| 0.5230701153994686|
| 7| 0.572063607751534|
| 8| 0.7689696831405166|
| 3| 0.82540915099773|
| 2| 0.8535692890157796|
+-----+-------------------+