首页 > 解决方案 > 使用 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|
+----+---+---+---+

每次转换完成时,如何确保在数据块中显示一致的输出。

标签: pythonpandasapache-sparkpysparkdatabricks

解决方案


推荐阅读