scala - 根据 spark 数据框中的列条件将最后一次出现的分隔符拆分为两列
问题描述
我有以下火花数据框
+------+--------------------+-----------------+--------------------+
|entity| instance| name| value|
+------+--------------------+-----------------+--------------------+
|Column| ARM_PRED| Histogram.abs. | 638065.0|
|Column| ARM_PRED|Histogram.ratio. | 1.0|
|Column| ATTR044_Count| Compliance| 0.9886814039322013|
|Column|ATTR090_MissingCount| Compliance| 0.9997570780406385|
|Column| ATTR045| Mean| 17101.922291929834|
|Column| ATTR045| Maximum| 4000000.0|
|Column| ATTR045| Minimum| 0.0|
|Column| ATTR045|StandardDeviation| 32981.67451994775|
|Column| ATTR020_Count| Compliance| 0.99814909139351|
|Column|ATTR036_MissingCount| Compliance|0.011260608245241473|
|Column| ATTR011_Count| Compliance| 0.99814909139351|
|Column| ATTR069| Mean| 0.8678189434810735|
|Column| ATTR069| Maximum| 103.0|
当name
列具有合规性值时。我必须instance
根据最后一次出现的分隔符“_”拆分列,并将值放在instance
列和name
列中。
预期输出:
+------+--------------------+-----------------+--------------------+
|entity| instance| name| value|
+------+--------------------+-----------------+--------------------+
|Column| ARM_PRED| Histogram.abs. | 638065.0|
|Column| ARM_PRED|Histogram.ratio. | 1.0|
|Column| ATTR044| Count| 0.9886814039322013|
|Column| ATTR090| MissingCount| 0.9997570780406385|
|Column| ATTR045| Mean| 17101.922291929834|
|Column| ATTR045| Maximum| 4000000.0|
|Column| ATTR045| Minimum| 0.0|
|Column| ATTR045|StandardDeviation| 32981.67451994775|
|Column| ATTR020| Count| 0.99814909139351|
|Column| ATTR036| MissingCount|0.011260608245241473|
|Column| ATTR011| Count| 0.99814909139351|
|Column| ATTR069| Mean| 0.8678189434810735|
|Column| ATTR069| Maximum| 103.0|
下面的代码对所有记录执行操作,但我只需要在name
列具有合规性值时执行
df.withColumn("instance", split($"instance", "_(?!.*_)"))
.withColumn("instance", $"instance"(0))
.withColumn("name", $"instance"(1))).show
需要帮忙!
解决方案
你可以使用when
函数。
例子:
df
.withColumn("_instance", split($"instance", "_(?!.*_)"))
.withColumn("instance", when($"name" === "Compliance", $"_instance"(0)).otherwise($"instance"))
.withColumn("name", when($"name" === "Compliance", $"_instance"(1)).otherwise($"name"))
.drop("_instance")
推荐阅读
- sql - 我想在不同的查询中使用动态结果
- c - Linux timer_settime() 产生分段错误
- ios - “为 iOS 构建,但嵌入式框架 'xxx.framework' 是为 iOS + iOS 模拟器构建的”
- spring - Spring 云服务器无法从 loacl 文件系统中读取
- ansible - Ansible 逻辑在某些情况下具有相同的用户 sudo 而在其他情况下正常
- amazon-redshift - 将 2 个分区文件夹合并到一个表中
- javascript - 应用程序缓存错误事件:无法将新缓存提交到存储
- java - OpenJDK 中使用的代码模板系统是什么?它是如何工作的?
- excel - 将数字 1-12 分配给另一组数字,当达到 12 时,再次从 1 开始下一个数字并继续
- javascript - 如何使用 jquery ajax 在 swiper 滑块中显示动态数据?