2017-09-19 161 views
0

簡單的問題,從一個新手在pySpark: 我有一個DF,我想作一個條件aggragation,返回聚集的結果,如果分母大於0否則爲0條件aggragation GROUPBY

我試探性產生不同的一個錯誤:

groupBy=["K"] 
exprs=[(sum("A")+(sum("B"))/sum("C") if sum("C")!=0 else 0 ] 
grouped_df=new_df.groupby(*groupBy).agg(*exprs) 

任何提示?

謝謝

回答

2

你必須使用when/otherwise用於if/else語句:

import pyspark.sql.functions as psf 
new_df.groupby("K").agg(
    psf.when(psf.sum("C")==0, psf.lit(0)).otherwise((psf.sum("A") + psf.sum("B"))/psf.sum("C")).alias("sum") 
) 

但你也可以這樣來做:

import pyspark.sql.functions as psf 
new_df.groupby("K").agg(
    ((psf.sum("A") + psf.sum("B"))/psf.sum("C")).alias("sum") 
).na.fill({"sum": 0}) 
+0

謝謝瑪麗。你是我的守護天使:-)我是PySpark的新手,因爲你已經猜到了,你的幫助非常值得歡迎 – user3623123

+0

:)這真的沒有問題,我們都必須從某個地方開始 – MaFF