【发布时间】:2021-02-07 18:19:42
【问题描述】:
有人可以帮助我如何在 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];;
【问题讨论】:
-
你的逻辑错了。当您
groupBy('MTH', 'YR').agg(sf.sum("Cash").alias("sum_Cash"))时,您将只有MTH, YR, sum_Cash。 -
@Sanket9394 非常感谢。你能帮我改写这个吗。
-
你需要通过这个 - cash_credit 里面的 agg 函数,否则将无法访问后续步骤..:)
标签: apache-spark pyspark aggregate-functions pyspark-dataframes