【问题标题】:how to create a new column by calculating a sum of column and dividing by a constant - pyspark如何通过计算列的总和并除以常数来创建新列 - pyspark
【发布时间】:2020-04-06 14:51:00
【问题描述】:

我必须通过连接另外两个数据框来创建一个数据框 在新数据框中,我通过计算 sum(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'

【问题讨论】:

  • 你没有添加“错误显示”
  • 如果不先使用 group by,添加带有聚合的列的目的是什么?我的意思是,您必须决定数据框中的哪些值必须计算总和,我怀疑您是否想要全部并将这个值添加到每一行。此外,如果您显示输入和预期输出样本数据,会容易得多。
  • 我添加了错误信息和 grouby 子句

标签: apache-spark pyspark division pyspark-dataframes


【解决方案1】:

你必须使用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")
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    相关资源
    最近更新 更多