在数据框的列上应用地图功能

我需要将数据框列的所有值合并为每列的单个值。所以这些列保持不变,但我只是对所有相应的值求和。为此,我打算使用此功能:

def sum_col(data, col):
    return data.select(f.sum(col)).collect()[0][0]

我现在想这样做:

data = data.map(lambda current_col: sum_col(data, current_col))

这是可行的,还是我需要另一种方法来合并列的所有值?


收到一只叮咚
浏览 122回答 2
2回答

ibeautiful

您可以通过 sum 函数实现此目的import pyspark.sql.functions as fdf.select(*[f.sum(cols).alias(cols) for cols in df.columns]).show()+----+---+---+|val1|  x|  y|+----+---+---+|  36| 29|159|+----+---+---+

繁华开满天机

要将所有列汇总为一个新列,您可以将列表推导与 python 的 sum 函数一起使用import pyspark.sql.functions as Ffrom pyspark.sql.functions import udffrom pyspark.sql.types import *tst= sqlContext.createDataFrame([(10,7,14),(5,1,4),(9,8,10),(2,6,90),(7,2,30),(3,5,11)],schema=['val1','x','y'])tst_sum= tst.withColumn("sum_col",sum([tst[coln] for coln in tst.columns]))结果:tst_sum.show()+----+---+---+-------+|val1|  x|  y|sum_col|+----+---+---+-------+|  10|  7| 14|     31||   5|  1|  4|     10||   9|  8| 10|     27||   2|  6| 90|     98||   7|  2| 30|     39||   3|  5| 11|     19|+----+---+---+-------+注意:如果您从 pyspark 函数中导入了 sum 函数,那么from import pyspark.sql.functions import sum您必须将名称更改为其他名称,例如from import pyspark.sql.functions import sum_pyspark
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python