我有以下示例pyspark Dataframe ,在groupby之后,我希望计算多个列中的第一个列的平均值。在真实的情况下,我有数百个列,因此无法单独计算
sp = spark.createDataFrame([['a',2,4,'cc','anc'], ['a',4,7,'cd','abc'], ['b',6,0,'as','asd'], ['b', 2, 4, 'ad','acb'],
['c', 4, 4, 'sd','acc']], ['id', 'col1', 'col2','col3', 'col4'])
+---+----+----+----+----+
| id|col1|col2|col3|col4|
+---+----+----+----+----+
| a| 2| 4| cc| anc|
| a| 4| 7| cd| abc|
| b| 6| 0| as| asd|
| b| 2| 4| ad| acb|
| c| 4| 4| sd| acc|
+---+----+----+----+----+
这就是我正在尝试的
mean_cols = ['col1', 'col2']
first_cols = ['col3', 'col4']
sc.groupby('id').agg(*[ f.mean for col in mean_cols], *[f.first for col in first_cols])
但是它不起作用。我怎么能用pyspark这样做呢
2条答案
按热度按时间j8ag8udp1#
在多个数据行上使用多个函数的最佳方式是使用.agg(*expr)格式。
结果将是
为了有选择地对列应用函数,可以有多个表达式数组,并在聚合中将它们连接起来。
7cjasjjr2#
更简单的方法是: