Python 对行进行分组、排序和透视的有效方法?
我最近开始学习PySpark的大数据分析。我有以下问题,并试图找到一个更好的方法来实现这一点。我会带你解决下面的问题 给定以下pyspark数据帧: 可乐 可乐 可乐 日期时间 价值 A. C yyy 01.04.2019 100 B D yyy 05.04.2019 200 B D xxx 09.04.2019 50 A. C yyy 08.04.2019 600 A. C xxx 02.04.2019 580 让我们试试这个: 第一个问题Python 对行进行分组、排序和透视的有效方法?,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,我最近开始学习PySpark的大数据分析。我有以下问题,并试图找到一个更好的方法来实现这一点。我会带你解决下面的问题 给定以下pyspark数据帧: 可乐 可乐 可乐 日期时间 价值 A. C yyy 01.04.2019 100 B D yyy 05.04.2019 200 B D xxx 09.04.2019 50 A. C yyy 08.04.2019 600 A. C xxx 02.04.2019 580 让我们试试这个: 第一个问题 df.orderBy(df.Col1.asc(),d
df.orderBy(df.Col1.asc(),df.Col2.asc(),df.Col3.asc()).show(truncate=False)
或
第二个问题-因为您订购了它们,所以删除重复项
df.dropDuplicates(["Col1","Col2","Col3"]).show()
现在让我们来谈谈重点
import pyspark.sql.functions as psf
df.groupBy(["Col1","Col2"]).pivot("Col3").agg(psf.max("Value")).show()
试试这个:
data_df.withColumn("row_no", row_number().over(Window.partitionBy("Col1", "Col2", "Col3").orderBy("DateTime")))
.filter(col("row_no") === 1)
.select("Col1", "Col2", "Col3", "Value")
.groupBy("Col1", "Col2")
.pivot("Col3")
.agg(collect_set("Value"))
.show
我没有将DateTime处理为排序日期,所以您可以自己处理,但会得到正确的结果
data_df.withColumn("row_no", row_number().over(Window.partitionBy("Col1", "Col2", "Col3").orderBy("DateTime")))
.filter(col("row_no") === 1)
.select("Col1", "Col2", "Col3", "Value")
.groupBy("Col1", "Col2")
.pivot("Col3")
.agg(collect_set("Value"))
.show