[英]Replace a value in a row with a value in another row in Spark dataframe
我有一個 dataframe 像這樣:
ID | 起始值 | 結束值 |
---|---|---|
1 | null | 11a |
1 | 554 | 22b |
2 | null | 33c |
2 | 6743 | 44天 |
假設我們將始終有 2 行具有相同的id
,其中startValue
具有值,另一行startValue
始終為 null。 我想用startValue-10
替換startValue
中的 null 值,其中startValue
取自具有相同 ID 的行,其中startValue
不是 null。
ID | 起始值 | 結束值 |
---|---|---|
1 | 544 | 11a |
1 | 554 | 22b |
2 | 6733 | 33c |
2 | 6743 | 44天 |
示例數據框:
val df = Seq(
("1", null, "11a"),
("1", 554, "22b"),
("2", null, "33c"),
("2", 6743, "44d"),
).toDF("id", "startValue", "endValue")
您可以將空值與在id
的同一分區中找到的另一個startValue
coalesce
,減去 10:
import org.apache.spark.sql.expressions.Window
val df2 = df.withColumn(
"startValue",
coalesce($"startValue", max($"startValue").over(Window.partitionBy("id")) - 10)
)
df2.show
+---+----------+--------+
| id|startValue|endValue|
+---+----------+--------+
| 1| 544| 11a|
| 1| 554| 22b|
| 2| 6733| 33c|
| 2| 6743| 44d|
+---+----------+--------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.