亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在數據框的列上應用地圖功能

在數據框的列上應用地圖功能

收到一只叮咚 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條經驗 獲得超6個贊

您可以通過 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 關注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號