scala - Spark,检查某些列是否为 True,然后用 Y 或 N 填充新列
问题描述
我正在尝试用 Y 或 N 填充新列。为此,我检查了两列,如果其中一列具有 True 值,则将 Y 放入新列,否则放入 N。
例如,我有这个数据框:
+--------------+----------+----------+------------------+--------+--------+-------------------+
|Date |Col1 | Col2 |ChangeinCol1_Col2 | Col3 | Col4 | ChangeinCol3_Col4 |
+--------------+----------+----------+------------------+--------+--------+-------------------+
|2020-12-14 |True | False | Y | False | False | N |
|2020-12-14 |False | False | Y | False | False | N |
如果 Col1 或 Col2 中存在 True,则 ChangeinCol1_Col2 列将为 Y,与 ChangeinCol3_Col4 相同,但在这种情况下有 N,因为 Col3 和 Col4 没有变化。
我怎么能用 Scala 中的 Apache Spark 做到这一点?我正在尝试使用 df.withColumn 创建新列,但不知道如何检查列中的值。
解决方案
您可以使用when
:
import org.apache.spark.sql.expressions.Window
val df2 = df.withColumn(
"ChangeinCol1_Col2",
when(max($"Col1").over(Window.orderBy()) || max($"Col2").over(Window.orderBy()), lit("Y")).otherwise(lit("N"))
).withColumn(
"ChangeinCol3_Col4",
when(max($"Col3").over(Window.orderBy()) || max($"Col4").over(Window.orderBy()), lit("Y")).otherwise(lit("N"))
)
推荐阅读
- database - 如何使用 Laravel Eloquent 根据属性/访问器条件查询对象?
- c# - 如何更改 ListView 中的行颜色
- node-red - Red Node 中的错误让我在 Node Red js 中获取请求时应用程序/json 错误
- java - 如何将多个整数值拆分为索引数组
- ios - WKWebView 不会出现在自定义 UIView 中
- php - 创建excel文件,然后使用phpmailer作为附件发送
- dc.js - 带有垂直画笔的 dc.js 散点图
- javascript - 为什么 mocha-webpack 在 test 文件夹而不是 app 文件夹中搜索组件?
- r - ggplot boxplot:position_dodge 不起作用
- vue.js - Vue js多选隐藏三角形与空