Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对行进行分组、排序和透视的有效方法?_Python_Apache Spark_Pyspark_Apache Spark Sql - Fatal编程技术网

Python 对行进行分组、排序和透视的有效方法?

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

我最近开始学习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(),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