我试图进行数据转换,但在databricks和GoogleColab中使用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|
+----+---+---+---+
在databricks中,我在生产集群上运行代码(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|
+----+---+---+---+
我如何确保每次转换完成时都在数据块中显示一致的输出
目前没有回答
相关问题 更多 >
编程相关推荐