scala - 在 Spark 数据帧的 when 子句中使用 contains
问题描述
我有以下 DS 和 DF 的工作声明:
val ds2 = ds.withColumn("new_telnum",
when(expr("substring(telnum,1,2)") === "91" ||
expr("substring(telnum,1,2)") === "01",
expr("substring(telnum,3,length(telnum)-2)"))
.otherwise(col("telnum")))
但是,我似乎无法将when
表达式转换为使用 aList
与contains
构造来替换or
.
解决方案
我建议使用isin,如下例所示:
import org.apache.spark.sql.functions._
val ds = Seq(
("012223334444"),
("1112223333"),
("913334445555"),
("884445556666")
).toDF("telnum").as[(String)]
val codeList = List("91", "01")
ds.withColumn( "new_telnum", when( substring($"telnum", 1, 2).isin(codeList: _*),
expr("substring(telnum, 3, length(telnum) - 2)")
).otherwise($"telnum")
).show
// +------------+------------+
// | telnum| new_telnum|
// +------------+------------+
// |012223334444| 2223334444|
// | 1112223333| 1112223333|
// |913334445555| 3334445555|
// |884445556666|884445556666|
// +------------+------------+
推荐阅读
- reactjs - 获取后如何从道具设置初始状态?
- regex - 正则表达式正在寻找匹配但如果只匹配一次则不计数
- angular - 如何使用 observable 动态更新 Angular Material Table
- mysql - 使用 2 个选择优化 SQL 查询
- python - 重置 Tkinter 窗口,恢复小部件
- r - 使用 testthat,在哪里放置自定义跳过功能?
- java - 带有 maven 的 Java 11/12 Javadoc 导致不生成用于测试的 Javadocs
- php - Laravel Blade 中的访问模型
- python - 在 NumPy 数组中用 ```[i,i,i]``` 快速替换元素 i 的 Pythonic 方法?
- html - Woocommerce 自定义开始评分