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
Apache spark 如何按列分组并聚合其余列_Apache Spark_Pyspark_Apache Spark Sql_Mean - Fatal编程技术网

Apache spark 如何按列分组并聚合其余列

Apache spark 如何按列分组并聚合其余列,apache-spark,pyspark,apache-spark-sql,mean,Apache Spark,Pyspark,Apache Spark Sql,Mean,我是pyspark的新手,所以如果有人能帮我解决这个问题,我将不胜感激 假设我在pyspark中有一个数据帧,如下所示: +----+----+----+----+----+ |col1|col2|col3|col4|col5| +----+----+----+----+----+ | A|2001| 2| 5| 6| | A|2001| 3| 6| 10| | A|2001| 3| 6| 10| | A|2002| 4| 5| 2|

我是pyspark的新手,所以如果有人能帮我解决这个问题,我将不胜感激

假设我在pyspark中有一个数据帧,如下所示:

+----+----+----+----+----+
|col1|col2|col3|col4|col5|
+----+----+----+----+----+
|   A|2001|   2|   5|   6|
|   A|2001|   3|   6|  10|
|   A|2001|   3|   6|  10|
|   A|2002|   4|   5|   2|
|   B|2001|   2|   9|   4|
|   B|2001|   2|   4|   3|
|   B|2001|   2|   3|   4|
|   B|2001|   3|  95|   7|
+----+----+----+----+----+
如果
col1
col2
col3
中的对应值相同,我想得到
col4
的平均值,然后去掉前3列中重复值的行

例如,第一列中的
col1
col2
col3
的值是相同的,因此,我们希望消除其中一个,并将
col4
的值更新为
col4
col5
的平均值。结果应该是:

+----+----+----+----+----+
|col1|col2|col3|col4|col5|
+----+----+----+----+----+
|   A|2001|   2| 4.5|   7|
|   A|2001|   3|   6|  10|
|   A|2002|   4|   5|   2|
|   B|2001|   2|5.33|3.67|
|   B|2001|   3|  95|   7|
+----+----+----+----+----+

类似的问题已经被提出,但在数据框架中。在pyspark dataframe

步骤1:创建所述的
数据帧
-

values = [('A',2001,2,5,6),('A',2001,2,4,8),('A',2001,3,6,10),('A',2002,4,5,2),
          ('B',2001,2,9,4),('B',2001,2,4,3),('B',2001,2,3,4),('B',2001,3,95,7)]
df = sqlContext.createDataFrame(values,['col1','col2','col3','col4','col5'])
df.show()
+----+----+----+----+----+
|col1|col2|col3|col4|col5|
+----+----+----+----+----+
|   A|2001|   2|   5|   6|
|   A|2001|   2|   4|   8|
|   A|2001|   3|   6|  10|
|   A|2002|   4|   5|   2|
|   B|2001|   2|   9|   4|
|   B|2001|   2|   4|   3|
|   B|2001|   2|   3|   4|
|   B|2001|   3|  95|   7|
+----+----+----+----+----+
步骤2:聚合列
col4
col5

df = df.groupby(['col1','col2','col3']).agg(avg('col4').alias('col4'),avg('col5').alias('col5'))
df.show()
+----+----+----+-----------------+------------------+
|col1|col2|col3|             col4|              col5|
+----+----+----+-----------------+------------------+
|   A|2001|   3|              6.0|              10.0|
|   A|2002|   4|              5.0|               2.0|
|   B|2001|   2|5.333333333333333|3.6666666666666665|
|   A|2001|   2|              4.5|               7.0|
|   B|2001|   3|             95.0|               7.0|
+----+----+----+-----------------+------------------+
IIUC
df.groupby(“col1”、“col2”、“col3”).agg(f.mean(“col4”)、f.mean(“col5”)
其中
f
import pyspark.sql.函数定义为f
的可能副本