我有一个DataFrame
,其中包含10行和2列:一个带有随机标识符值的ID
列和一个用VAL
填充的None
列。
vals = [
Row(ID=1,VAL=None),
Row(ID=2,VAL=None),
Row(ID=3,VAL=None),
Row(ID=4,VAL=None),
Row(ID=5,VAL=None),
Row(ID=6,VAL=None),
Row(ID=7,VAL=None),
Row(ID=8,VAL=None),
Row(ID=9,VAL=None),
Row(ID=10,VAL=None)
]
df = spark.createDataFrame(vals)
现在可以说我要为VAL
列更新3行,其值为“ lets ”,3行,其值为“ bucket ”和4行的值为“ this ”。
在PySpark中有一种简单的方法吗?
注意:ID值不一定是连续的,存储区分布不一定是偶数
答案 0 :(得分:0)
我将尝试用一些伪代码解释一个想法,然后将您映射到您的解决方案。
在一个分区上使用窗口函数,我们可以为数据帧中的每一行生成row_number()
序列号,并将其存储在列row_num
中。
接下来,您的“规则”可以表示为另一个小数据框:[min_row_num, max_row_num, label]
。
您需要做的就是将这两个数据集连接到行号上,添加新列:
df1.join(df2,
on=col('df1.row_num').between(col('min_row_num'), col('max_row_num'))
)
.select('df1.*', 'df2.label')