3 回答

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
試試這個(gè):
df = df.withColumn('result', sum(df[col] for col in df.columns))
df.columns
將是來(lái)自 df 的列列表。

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果您有靜態(tài)列列表,則可以執(zhí)行以下操作:
df.withColumn("result", col("col1") + col("col2") + col("col3"))
但是,如果您不想鍵入整個(gè)列列表,則需要col("col1") + col("col2") + col("col3")迭代生成短語(yǔ)。為此,您可以使用reduce帶有add函數(shù)的方法來(lái)獲?。?/p>
reduce(add, [col(x) for x in df.columns])
這些列一次添加兩列,因此您將得到col(col("col1") + col("col2")) + col("col3")而不是col("col1") + col("col2") + col("col3"). 但效果是一樣的。
將col(x)確保你得到col(col("col1") + col("col2")) + col("col3")一個(gè)簡(jiǎn)單的字符串連接,而不是(產(chǎn)生(col1col2col3)。
[TL;博士,]
結(jié)合上面的步驟,你可以做到:
from functools import reduce
from operator import add
from pyspark.sql.functions import col
df.na.fill(0).withColumn("result" ,reduce(add, [col(x) for x in df.columns]))
該df.na.fill(0)部分用于處理數(shù)據(jù)中的空值。如果您沒(méi)有任何空值,則可以跳過(guò)它并改為執(zhí)行此操作:
df.withColumn("result" ,reduce(add, [col(x) for x in df.columns]))

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
將列表中的多列添加到一列中
我嘗試了很多方法,以下是我的觀察:
PySpark 的sum函數(shù)不支持列添加(Pyspark 版本 2.3.1)
內(nèi)置python的sum功能對(duì)某些人有效,但對(duì)其他人卻有錯(cuò)誤。
因此,可以使用exprPySpark 中的函數(shù)來(lái)實(shí)現(xiàn)多列的添加,該函數(shù)將要計(jì)算的表達(dá)式作為輸入。
from pyspark.sql.functions import expr
cols_list = ['a', 'b', 'c']
# Creating an addition expression using `join`
expression = '+'.join(cols_list)
df = df.withColumn('sum_cols', expr(expression))
這為我們提供了所需的列總和。我們還可以使用任何其他復(fù)雜表達(dá)式來(lái)獲得其他輸出。
添加回答
舉報(bào)