如果首先,如何将SAS代码逻辑转换为Pyspark?

发布于 2025-02-11 04:45:36 字数 1909 浏览 1 评论 0原文

我正在尝试将以下SAS逻辑转换为Pyspark,但我没有得到预期的输出。

if first.loan then seq_id = 0;
seq_id+1

The current dataset:

loanmodule
743455
4490795
1101235
1101335
1101435
3471898

The expected dataset:

loanmoduleseq_id
7434551
44907951
11012351
11013352
11014353
34718981

I'm trying to convert the following SAS logic to PySpark, but I'm not getting the expected output.

if first.loan then seq_id = 0;
seq_id+1

The current dataset:

loanmodule
743455
4490795
1101235
1101335
1101435
3471898

The expected dataset:

loanmoduleseq_id
7434551
44907951
11012351
11013352
11014353
34718981

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不疑不惑不回忆 2025-02-18 04:45:36

对于组中的第一个值,您分配seq_id = 0,然后立即使用seq_id+1更改它。一对一组中的后续值使用seq_id+1更改,因此有效地在每个组中创建行号。

在Spark中,可以使用

from pyspark.sql import functions as F, Window as W
df = spark.createDataFrame(
    [(743, 455),
     (4490, 795),
     (1101, 235),
     (1101, 335),
     (1101, 435),
     (3471, 898)],
    ['loan', 'module'])

w = W.partitionBy('loan').orderBy('module')
df = df.withColumn('seq_id', F.row_number().over(w))

df.show()
# +----+------+------+
# |loan|module|seq_id|
# +----+------+------+
# | 743|   455|     1|
# |1101|   235|     1|
# |1101|   335|     2|
# |1101|   435|     3|
# |3471|   898|     1|
# |4490|   795|     1|
# +----+------+------+

For the first value in the group, you assign seq_id=0 and then you immediately change it using seq_id+1. Subsequent values in the group one-by-one get changed using seq_id+1, so effectively you create row numbers in every group.

In Spark, this can be done using row_number window function.

from pyspark.sql import functions as F, Window as W
df = spark.createDataFrame(
    [(743, 455),
     (4490, 795),
     (1101, 235),
     (1101, 335),
     (1101, 435),
     (3471, 898)],
    ['loan', 'module'])

w = W.partitionBy('loan').orderBy('module')
df = df.withColumn('seq_id', F.row_number().over(w))

df.show()
# +----+------+------+
# |loan|module|seq_id|
# +----+------+------+
# | 743|   455|     1|
# |1101|   235|     1|
# |1101|   335|     2|
# |1101|   435|     3|
# |3471|   898|     1|
# |4490|   795|     1|
# +----+------+------+
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文