Apache Spark 中的多个 withColumn 错误

Posted

技术标签:

【中文标题】Apache Spark 中的多个 withColumn 错误【英文标题】:Error With Multiple withColumn in Apache Spark 【发布时间】:2016-10-24 22:37:34 【问题描述】:

这行代码没有像我想象的那样工作:

val df2 = df1
  .withColumn("email_age", when('age_of_email <= 60, 1))
  .withColumn("email_age", when('age_of_email <= 120, 2))
  .withColumn("email_age", when('age_of_email <= 180, 3).otherwise(4))

我在 df1 中有数千行 age_of_email 小于 60 和/或小于 120,但我所有的行都被归类为 34

对为什么会发生这种情况有任何见解吗?

【问题讨论】:

在不知道您使用的是什么库或其他任何东西的情况下,我们应该如何回答您的问题... 这是您要找的吗? : import org.apache.spark.sql._ , import org.apache.spark.ml._ 你为什么会认为我们知道你在使用 spark? 我从未使用过 spark,但看起来您不能在同一列上多次使用 .withColumn。您的最后一个电话正在覆盖您以前的电话。 ***.com/questions/34908448/… 您在所有三个 withColumn 方法中使用相同的列名。您应该在每种方法上使用不同的名称。年龄 【参考方案1】:

正如人们在 cmets 中所说,使用 withColumn 和数据框中已经存在的列名将替换该列。

我认为对于您想要实现的目标,您可以为每个分类使用不同的列名,或者简单地将 when() 连接到单个列中,例如

val df2 = df1.withColumn("email_age", when('age_of_email <= 60, 1)
                                     .when('age_of_email <= 120, 2)
                                     .when('age_of_email <= 180, 3)
                                     .otherwise(4))

我猜你知道类别是类别3 的子集

【讨论】:

以上是关于Apache Spark 中的多个 withColumn 错误的主要内容,如果未能解决你的问题,请参考以下文章

使用多列更新 Apache Spark / Databricks 中的表

Apache Spark 启动多个 SparkContext 实例

使Apache Spark更快的11大因素

在 Apache Spark 中为每行迭代添加范围变量

Apache Spark - 多个 RDD 的交集

Spark编程题