识别 pyspark 中第一次出现的列值,然后根据它增加另一列

Posted

技术标签:

【中文标题】识别 pyspark 中第一次出现的列值,然后根据它增加另一列【英文标题】:Identify the first occurrenc of a column value in pyspark and then increment another column based on it 【发布时间】:2020-04-05 14:47:34 【问题描述】:

当我在 pyspark 中遇到新的客户 ID 时,我正在尝试增加一列 我的 pyspark 数据框(类型 - pyspark.sql.dataframe.DataFrame)有 2 列 客户ID 101 101 102 103 103 103 每当一个新的 Customer_ID 标志值重置为 1 并在遇到相同的 id 时递增。我想要以下输出数据框 Customer_id 标志

101 1

101 2

102 1

103 1

103 2

103 3

【问题讨论】:

【参考方案1】:

customer_id 列上使用window 子句row_number() 函数和partitionBy

from pyspark.sql.functions import *
from pyspark.sql import Window
w = Window.partitionBy("customer_id").orderBy(lit("1"))
df1=df.withColumn("Flag",row_number().over(w))
df1.show()
#+-----------+----+
#|customer_id|Flag|
#+-----------+----+
#|        101|   1|
#|        101|   2|
#|        102|   1|
#|        103|   1|
#|        103|   2|
#|        103|   3|
#+-----------+----+

【讨论】:

我可以存储这是一个 pyspark 数据帧吗?我尝试了 type(df1) 但它给出了 Type:NoneType @shreeja7,是的.. 试试df1=df.withColumn("Flag",row_number().over(w))

以上是关于识别 pyspark 中第一次出现的列值,然后根据它增加另一列的主要内容,如果未能解决你的问题,请参考以下文章

如何检查来自不同数据框的列值?

在 pyspark 中查找和删除匹配的列值

从具有目标列值的列更新 pyspark 数据框

Pyspark:如何将现有非空列的元组列表作为数据框中的列值之一返回

当列表值与Pyspark数据帧中的列值的子字符串匹配时,填充新列

在pyspark数据框的列中使用正则表达式捕获两个字符串之间的第一次出现的字符串