首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Apache Spark,添加一个"CASE WHEN ... ELSE ...“将计算列复制到现有DataFrame

Apache Spark,添加一个"CASE WHEN ... ELSE ...“将计算列复制到现有DataFrame
EN

Stack Overflow用户
提问于 2015-06-11 22:20:41
回答 4查看 57.6K关注 0票数 22

我正在尝试添加一个"CASE WHEN ... ELSE ...“使用Scala将计算列添加到现有的DataFrame。正在启动数据帧:

代码语言:javascript
复制
color
Red
Green
Blue

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

代码语言:javascript
复制
color bool
Red   0
Green 1
Blue  0

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-11 23:18:47

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

代码语言:javascript
复制
// 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:

代码语言:javascript
复制
// Define the UDF
val isGreen = udf((color: String) => {
  if (color == "Green") 1
  else 0
})
val df2 = df.withColumn("Green_Ind", isGreen($"color"))
票数 57
EN

Stack Overflow用户

发布于 2015-10-28 20:46:07

在Spark 1.5.0中:您还可以使用SQL语法expr函数

代码语言:javascript
复制
val df3 = df.withColumn("Green_Ind", expr("case when color = 'green' then 1 else 0 end"))

或简单的spark-sql

代码语言:javascript
复制
df.registerTempTable("data")
val df4 = sql(""" select *, case when color = 'green' then 1 else 0 end as Green_ind from data """)
票数 10
EN

Stack Overflow用户

发布于 2017-02-26 04:10:44

我发现了这个:

https://issues.apache.org/jira/browse/SPARK-3813

在spark 2.1.0上为我工作:

代码语言:javascript
复制
import sqlContext._
val rdd = sc.parallelize((1 to 100).map(i => Record(i, s"val_$i")))
rdd.registerTempTable("records")
println("Result of SELECT *:")
sql("SELECT case key when '93' then 'ravi' else key end FROM records").collect()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30783517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档