Dataframe 在pyspark中使用过滤条件求和

Dataframe 在pyspark中使用过滤条件求和,dataframe,apache-spark,pyspark,apache-spark-sql,pyspark-dataframes,Dataframe,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Dataframes,我正在pysparkdataframes中进行聚合。 我需要检查PAYMNT\u STATUS列,在此基础上,我需要获取不同列的sum,并需要分配到新列中。 此外,我正在计算不同的状态,并将其分配到一个新列中 我正在编写我的pyspark查询,如下所示: result=df1.groupby(countrry,year).withColumn('Amt1',sf.when(sf.col('PAYMNT_STATUS')==='A1', sf.sum('Amt1_RS'))).with

我正在
pyspark
dataframes中进行聚合。 我需要检查
PAYMNT\u STATUS
列,在此基础上,我需要获取不同列的
sum
,并需要分配到新列中。 此外,我正在计算不同的状态,并将其分配到一个新列中

我正在编写我的
pyspark
查询,如下所示:

   result=df1.groupby(countrry,year).withColumn('Amt1',sf.when(sf.col('PAYMNT_STATUS')==='A1',
   sf.sum('Amt1_RS'))).withColumn("Amt2",sf.when(sf.col("PAYMNT_STATUS")==="B1",
   sf.sum("Amt2_RS"))).agg(sf.sum("amt3").alias("amt_rs"))
    .agg(countDistinct("state")).alias("state_count")
但是得到一个语法错误。 有人能指引我吗?我应该如何重写这段代码

等效SQL:

    SUM(DECODE(PAYMNT_STATUS, 'A1', NVL(Amt1_RS, 0))) AS Amt1,
        SUM(DECODE(PAYMNT_STATUS, 'B1', NVL(Amt2_RS, 0))) AS Amt2,
        SUM(ISNULL(amt3, 0)) AS amt_rs,
        COUNT(DISTINCTstate) as state_count

到目前为止,我还没有考虑这个
NVL
ISNULL
部分。

你可以试试这样的东西

String filteringCondition = "PAYMNT_STATUS==Al" (could be extended to many)
String filteringCondition2 = "PAYMNT_STATUS==Bl" (could be extended to many)


result=df1.groupby(countrry,year).withColumn('Amt1',sum(when(expr(filteringCondition),col('Amt1_RS')).otherwise(0))
.withColumn("Amt2", sum(when(expr(filteringCondition2), col("Amt2_RS")).otherwise(0))

您能否以表格格式共享输入数据和预期数据?这有助于其他人更好地理解