识别 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:如何将现有非空列的元组列表作为数据框中的列值之一返回