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,但我所有的行都被归类为 3 或 4:
对为什么会发生这种情况有任何见解吗?
【问题讨论】:
在不知道您使用的是什么库或其他任何东西的情况下,我们应该如何回答您的问题... 这是您要找的吗? :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 中的表