【问题标题】:Pyspark counter field, groupby and increment by 1Pyspark 计数器字段,groupby 并递增 1
【发布时间】:2019-10-13 09:40:43
【问题描述】:

我的数据框如下:

cola, colb
1, 2
1, 3
2, 1
2, 5

我要加一栏count

cola, colb, count
1,     2,    1
1,     3,    2
2,     1,    1
2,     5,    2

需要对 colA 进行分组并将第一条记录的计数设置为 1,然后将每个连续的行递增 1。

我尝试使用窗口函数,但它对 colA 中的所有记录应用相同的计数而没有增量。

【问题讨论】:

    标签: group-by count pyspark counter pyspark-sql


    【解决方案1】:

    您已经发现窗口函数是可行的方法。可能你没用过rank函数。

    import pyspark.sql.functions as F
    from pyspark.sql import Window
    
    l = [(1       , 2),
    (1      , 3  ),
    (1      , 2  ),
    (2      , 1  ),
    (2      , 5)]
    
    columns = ['cola', 'colb']
    
    df=spark.createDataFrame(l, columns)
    
    w = Window.partitionBy('cola').orderBy('colb')
    
    df = df.withColumn('count', F.rank().over(w))
    df.show()
    

    输出:

    +----+----+-----+ 
    |cola|colb|count| 
    +----+----+-----+ 
    |   1|   2|    1| 
    |   1|   2|    1| 
    |   1|   3|    3| 
    |   2|   1|    1| 
    |   2|   5|    2|
    +----+----+-----+
    

    如果您不想在相等的行之后出现间隙,您应该使用dense_rank 函数。

    【讨论】:

    • 正在寻找类似的信息。谢谢!
    猜你喜欢
    • 2015-01-10
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 2019-08-11
    • 2021-04-01
    相关资源
    最近更新 更多