我是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|
+----+----+----+----+----+
如果col4
,col1
和col2
中的对应值相同,我想获取col3
的平均值,然后用前3列中的重复值。
例如,第一两列中的col1
,col2
,col3
的值是相同的,因此,我们要消除其中一个并更新{ {1}}作为col4
和col4
的平均值。结果应该是:
col5
有人问过类似的问题,但在熊猫数据框中。在pyspark数据帧中问这个问题
答案 0 :(得分:0)
步骤1:创建上述的DataFrame
-
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|
+----+----+----+-----------------+------------------+