簡體   English   中英

在 Spark dataframe 中將一行中的值替換為另一行中的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM