gpt4 book ai didi

python - 如何在 Spark 数据框中添加具有序列值的列?

转载 作者:行者123 更新时间:2023-11-30 22:09:42 24 4
gpt4 key购买 nike

如何添加包含 PySpark 数据框中特定数字的序列值的列?

当前数据集:

Col1    Col2    Flag
Val1 Val2 F
Val3 Val4 T

但我希望数据集是这样的:

Col1    Col2    Flag    New_Col
Val1 Val2 F 11F
Val3 Val4 T 12T

我正在使用以下 Python 代码。

from pyspark.sql import functions as F
from pyspark.sql import types as T

seq = 10

def fn_increment_id(flag):
global seq
seq += 1
return str(seq) + flag

if __name__ == "__main__":
df = spark.loadFromMapRDB("path/to/table")
my_udf = F.UserDefinedFunction(fn_increment_id, T.StringType())
df = df.withColumn("New_Col", my_udf("Flag"))
print(df.show(10))

但是,我最终得到了结果:

Received Dataset:

Col1 Col2 Flag New_Col
Val1 Val2 F 11F
Val3 Val4 T 11T

因此,所有行的值都增加一次。如何为每一行递增?提前致谢。

最佳答案

可以使用窗口添加具有连续值的列。只要数据帧不是太大,就可以了,对于较大的数据帧,您应该考虑在窗口上使用 partitionBy ,但值不会是连续的。

下面的代码为每行创建序号,加 10,然后将该值与 Flag 列连接起来以创建一个新列。这里的行按 Col1 排序,但可以使用任何列。

from pyspark.sql.window import Window
from pyspark.sql.functions import col, row_number, concat

w = Window().orderBy("Col1")
df = df.withColumn("New_Col", concat(row_number().over(w) + 10, col(Flag)))

关于python - 如何在 Spark 数据框中添加具有序列值的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51853704/

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