首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个新列,当值重置为另一列中的pyspark中的1时,增加值。

创建一个新列,当值重置为另一列中的pyspark中的1时,增加值。
EN

Stack Overflow用户
提问于 2022-03-15 04:09:21
回答 1查看 95关注 0票数 1

逻辑列在DataFrame中考虑一个列,如1,2,3,4,1,2,1,2,3,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,4,5,2,6,7,2。火花柱创建一个新的列,当值重置为1时,预期产出为1,1,1,2,2,3,4,4,5,5,6,7,7。

我对火种有点陌生,如果有人能帮我的话,那对我来说就太棒了。

如下所示编写了逻辑

代码语言:javascript
复制
def sequence(row_num):
    results = [1, ]
    flag = 1
    for col in range(0, len(row_num)-1):
        if row_num[col][0]>=row_num[col+1][0]:
            flag+=1
        results.append(flag)
    return results

但无法通过udf传递列。请帮我这个忙

EN

回答 1

Stack Overflow用户

发布于 2022-03-15 14:06:28

你的数据:

代码语言:javascript
复制
df  = spark.createDataFrame(
  [
('1','a'),
('2','b'),
('3','c'),
('4','d'),
('1','e'),
('2','f'),
('1','g'),
('1','h'),
('2','i'),
('3','j'),
('1','k'),
('2','l'),
('1','m'),
('1','n'),
('2','o')
  ], ['group','label']
)

+-----+-----+
|group|label|
+-----+-----+
|    1|    a|
|    2|    b|
|    3|    c|
|    4|    d|
|    1|    e|
|    2|    f|
|    1|    g|
|    1|    h|
|    2|    i|
|    3|    j|
|    1|    k|
|    2|    l|
|    1|    m|
|    1|    n|
|    2|    o|
+-----+-----+

您可以创建一个标志,并使用一个窗口函数来计算累积和。不需要使用UDF:

代码语言:javascript
复制
from pyspark.sql import Window as W
from pyspark.sql import functions as F

w = W.partitionBy().orderBy('label').rowsBetween(Window.unboundedPreceding, 0)

df\
    .withColumn('Flag', F.when(F.col('group') == 1, 1).otherwise(0))\
    .withColumn('Output', F.sum('Flag').over(w))\
    .show()

+-----+-----+----+------+
|group|label|Flag|Output|
+-----+-----+----+------+
|    1|    a|   1|     1|
|    2|    b|   0|     1|
|    3|    c|   0|     1|
|    4|    d|   0|     1|
|    1|    e|   1|     2|
|    2|    f|   0|     2|
|    1|    g|   1|     3|
|    1|    h|   1|     4|
|    2|    i|   0|     4|
|    3|    j|   0|     4|
|    1|    k|   1|     5|
|    2|    l|   0|     5|
|    1|    m|   1|     6|
|    1|    n|   1|     7|
|    2|    o|   0|     7|
+-----+-----+----+------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71476959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档