首页 > 解决方案 > 如何通过计算列的总和并除以常数来创建新列 - pyspark

问题描述

我必须通过加入其他两个数据框来创建一个数据框在新的数据框中,我通过计算 asum(Col1)并除以我在代码下面尝试的数字来创建一个新列,它们都不起作用。

我们如何在 pyspark 中处理将一列除以一个常量

尝试1:

 df = df2.join(df1,cond,'inner).df1.groupby('category').withColumn('Amt', 
 (sum(df1('Col1'))/ 100))\
.withColumn('Amt1',(sum(df1(Col2))/ 100))\
.withColumn('Amt2',(sum(df1(Col3))/ 100))\

尝试2:

(df1.agg(sum('Col1')))/lit(100)

尝试3:

(df1.agg(sum('Col1')).div(100))

显示错误:

尝试 3:AttributeError:'DataFrame' 对象没有属性 'div' 尝试 1 和 2:TypeError:不支持的操作数类型 /:'DataFrame' 和 'int'

标签: apache-sparkpysparkdivisionpyspark-dataframes

解决方案


你必须使用agg. 要给出正确的列名,您可以使用alias

df = df2.join(df1,cond,'inner').df1.groupby('category').agg( 
 (sum(df1('Col1'))/ 100).alias("Amt"),
 (sum(df1('Col2'))/ 100).alias("Amt1"),
 (sum(df1("Col3"))/ 100).alias("Amt2")
)

推荐阅读