2017-09-19 83 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