首页 > 解决方案 > 给定输入列无法解析“Column_Name”:错误:Pyspark Dataframes

问题描述

有人可以帮助我如何在 Pyspark Dataframe 中的 sql 下实现。

    (SUM(Cash) /SUM(cash + credit)) * 100 AS Percentage,
        
    df1=df.withColumn("cash_credit",sf.col("cash") + sf.col("credit")) 
    df1.show(5)

    -------------+---------------+ +--------+-------+------+------| 
    Credit        |Cash   |       MTH|YR           |  cash_credit | 
    -------------+---------------+ -------+--------|--------------|
     100.00|       400.00|         10|       2019  |  500.00      | 
     0.00  |       500.00|         6 |       2019  |  500.00      |  
     200.00|       600.00|         12|       2018  |  800.00      | 
     0.00  |       0.00  |         10|       2019  |  0.00        | 
     300.00|       700.00|          7|       2019  |  1000.00     | 
    -------------+---------------+----------+--------+-------+--- | 

我在 Pyspark 代码下尝试过。

    df2 = df1.groupBy('MTH', 'YR').agg(sf.sum("Cash").alias("sum_Cash"))\
             .withColumn("final_column",sf.col("sum_Cash") + sf.col("cash_credit"))\
             .withColumn("div",sf.col("sum_Cash")/sf.col("final_column"))\
             .withColumn("Percentage",sf.col("div")*100)

但无法执行。它显示以下错误。

    cannot resolve '`cash_credit`' given input columns: [MTH, YR, sum_Cash];;

标签: apache-sparkpysparkaggregate-functionspyspark-dataframes

解决方案


您可以像这样修改它以将 cash_credit 带出 groupby-aggregation:

df2 = df1.groupBy('MTH', 'YR').agg(sf.sum("Cash").alias("sum_Cash"),sf.sum("cash_credit").alias("cash_credit"))\
         .withColumn("final_column",sf.col("sum_Cash") + sf.col("cash_credit"))\
         .withColumn("div",sf.col("sum_Cash")/sf.col("final_column"))\
         .withColumn("Percentage",sf.col("div")*100)

我对“cash_credit”使用 sum 聚合,但您可以使用其他聚合函数。


推荐阅读