scala - Apache Spark,将 “CASE WHEN … ELSE …”计算列添加到现有DataFrame中

标签 scala apache-spark dataframe apache-spark-sql

我正在尝试使用Scala API将“CASE WHEN ... ELSE ...”计算列添加到现有DataFrame中。
起始数据帧:

color
Red
Green
Blue

所需的数据帧(SQL语法:CASE WHEN color == Green THEN 1 ELSE 0 END AS bool):
color bool
Red   0
Green 1
Blue  0

我应该如何实现这种逻辑?

最佳答案

在即将发布的SPARK 1.4.0版本中(应在 future 几天内发布)。您可以使用when / otherwise语法:

// Create the dataframe
val df = Seq("Red", "Green", "Blue").map(Tuple1.apply).toDF("color")

// Use when/otherwise syntax
val df1 = df.withColumn("Green_Ind", when($"color" === "Green", 1).otherwise(0))

如果使用的是SPARK 1.3.0,则可以选择使用UDF:
// Define the UDF
val isGreen = udf((color: String) => {
  if (color == "Green") 1
  else 0
})
val df2 = df.withColumn("Green_Ind", isGreen($"color"))

关于scala - Apache Spark,将 “CASE WHEN … ELSE …”计算列添加到现有DataFrame中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30783517/

相关文章:

scala - 为什么使用函数参数应用 println 会失败而不打印?

scala - 为什么这里需要括号?

scala - Akka - 使用反射创建 Actor

scala - Spark-Scala HBase 表创建失败(MetaException(消息 :file:/user/hive/warehouse/src is not a directory or unable to create one)

scala - 将拆分与数据框一起使用时出现未找到错误

python - 如果 Python Pandas 中的索引相互匹配,则减去日期

python - 根据条件检索具有最高值的行

java - 无法使用 play 框架应用程序注入(inject)器注入(inject) WSClient

hadoop - Spark 是 Apache Hadoop 的替代品吗

python - 对数据框中的一行条件进行外部处理