python - 使用 pyspark 转换时 databricks 和 Google Colab 的不同结果
问题描述
我试图进行数据转换,但在 databricks 和 google colab 中使用 pyspark 时发现了不同的结果。我基本上是将 pysaprk 数据帧从长格式转换为宽格式。以下面的方式。
这是我的代码片段。
from pyspark.sql.types import DoubleType
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('abc').getOrCreate()
df = spark.createDataFrame([1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0], DoubleType()).toDF("Number")
df.show()
>>
+------+
|Number|
+------+
| 1.0|
| 2.0|
| 3.0|
| 4.0|
| 5.0|
| 6.0|
| 7.0|
| 8.0|
| 9.0|
+------+
from pyspark.sql import functions as F, Window
from math import sqrt
c = int(sqrt(df.count())) #this gives 3
rnum = F.row_number().over(Window.orderBy(F.lit(1)))
out = (df.withColumn("Rnum",((rnum-1)%c).cast("Integer"))
.withColumn("idx",F.row_number().over(Window.partitionBy("Rnum").orderBy("Rnum")))
.groupby("Rnum").pivot("idx").agg(F.first("Number")))
colab 中 out.show 的输出如下所示。这是我需要的期望输出。 https://colab.research.google.com/drive/10Yuggohq3MmpckWgcJrc5w1Q8vu5jSEh#scrollTo=JxnQk51nEkJd
+----+---+---+---+
|Rnum| 1| 2| 3|
+----+---+---+---+
| 0|1.0|4.0|7.0|
| 1|2.0|5.0|8.0|
| 2|3.0|6.0|9.0|
+----+---+---+---+
在我在生产集群(64 核 | 224GB | DBR 7.0 | Spark 3.0.0)上运行代码的数据块中,每次运行转换代码时输出都不同。例如。out.show() 的代码输出实例之一是:
+----+---+---+---+
|Rnum| 1| 2| 3|
+----+---+---+---+
| 0|3.0|7.0|1.0|
| 1|4.0|2.0|5.0|
| 2|8.0|6.0|9.0|
+----+---+---+---+
每次转换完成时,如何确保在数据块中显示一致的输出。
解决方案
推荐阅读
- xquery - 如何基于集合获取计数并在 XQuery 中使用多个元素词查询?
- sqlite - SQLite IFNULL 在公式中不起作用
- c++ - c++ SDL2-ld||找不到-lmingw32|
- c++ - 为什么WinAPI控件大小改变后不调用WM_NCCALSIZE?
- java - Java Riak“操作正在进行时通道关闭”错误
- python - Python ImportError:没有名为“funds”的模块
- terraform - 在“s3”后端检查状态时出错:NoSuchBucket:指定的存储桶不存在
- git - “git fetch && git checkout”与“git checkout”有什么区别?
- javascript - 遍历数组时应该使用 for-of 还是 forEach?
- regex - 在两场比赛之间使用非捕获组?