为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

收到一只叮咚 2023-02-12 18:59:08
我需要将数据框列的所有值合并为每列的单个值。所以这些列保持不变,但我只是对所有相应的值求和。为此,我打算使用此功能: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))这是可行的,还是我需要另一种方法来合并列的所有值?
查看完整描述

2 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

您可以通过 sum 函数实现此目的


import pyspark.sql.functions as f

df.select(*[f.sum(cols).alias(cols) for cols in df.columns]).show()


+----+---+---+

|val1|  x|  y|

+----+---+---+

|  36| 29|159|

+----+---+---+


查看完整回答
反对 回复 2023-02-12
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

要将所有列汇总为一个新列,您可以将列表推导与 python 的 sum 函数一起使用


import pyspark.sql.functions as F

from pyspark.sql.functions import udf

from 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


查看完整回答
反对 回复 2023-02-12
  • 2 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信