gpt4 book ai didi

hadoop - Pyspark 数据转换逻辑,用于将一列值分配给另一列

转载 作者:可可西里 更新时间:2023-11-01 16:39:06 24 4
gpt4 key购买 nike

我正在使用 spark 2.1.0。我有如下所述的数据框。我对 pyspark 很陌生,我被这个问题困扰了

现在的问题陈述是:考虑到 b 列,我应该根据对 a 列的引用填充 C 列,即对于 a 列中的每 4 个值,必须使用 b 列中的引用值来填充 c 列。例如,如下图所示,第 4 行的等效 c 值为 30。这 30 是从 b 列获得的,其等效 a 为 1

下面是我的原始数据框

a   b
0 0
1 30
2 18
3 10
4 5
5 1
1 8
2 6
3 9
4 3
5 4
1 2
2 18
3 2
4 1
5 15

结果数据框应如下所示:

a   b   c
0 0 0
1 30 0
2 18 0
3 10 0
4 5 30
5 1 18
1 8 10
2 6 5
3 9 1
4 3 8
5 4 6
1 2 9
2 18 3
3 2 4
4 1 2
5 15 18

请帮我解决这个提前谢谢

最佳答案

您可以使用 lag获取上一行的函数如下所示

import spark.implicits._
val df1 = Seq (
(0, 0),
(1, 30),
(2, 18),
(3, 10),
(4, 5),
(5, 1),
(1, 8),
(2, 6),
(3, 9),
(4, 3),
(5, 4),
(1, 2),
(2, 18),
(3, 2),
(4, 1),
(5, 15)
).toDF("a", "b")

df1.show()

df1.withColumn("id", monotonically_increasing_id())
.withColumn("c", lag($"b", 3, 0).over(Window.orderBy("id")))
.drop("id")
.show()

输出:

+---+---+---+
| a| b| c|
+---+---+---+
| 0| 0| 0|
| 1| 30| 0|
| 2| 18| 0|
| 3| 10| 0|
| 4| 5| 30|
| 5| 1| 18|
| 1| 8| 10|
| 2| 6| 5|
| 3| 9| 1|
| 4| 3| 8|
| 5| 4| 6|
| 1| 2| 9|
| 2| 18| 3|
| 3| 2| 4|
| 4| 1| 2|
| 5| 15| 18|
+---+---+---+

希望这对您有所帮助!

关于hadoop - Pyspark 数据转换逻辑,用于将一列值分配给另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45428709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com