簡體   English   中英

我們可以用 pyspark 或 python 中的任何給定數字啟動 dense_rank() 嗎?

[英]Can we start dense_rank() with any given number in pyspark or python?

我正在嘗試根據一列的值生成dense_rank(),但我想從給定的輸入數字開始生成dense_rank()。 這在 pyspark 或 python 中是否可行?

例子:

我用來在 pyspark 中生成 dense_rank() 的代碼:

if(masterjobname == 'IM_XREF_BRIDGE_ADDR'):
            df = sqlContext.sql(query)
            print("Target:  "+targetpath )
            w = (Window().orderBy("SOURCE_COLUMN_VALUE"))
            df = df.withColumn("SYSTEM_ID", dense_rank().over(w))
            cols = list(df.columns)
            cols = cols[-1:] + cols[:-1]
            df = df[cols]

SYSTEM_ID    
 1
 2
 2
 3
 4
 4
 5

所以這里 maxdense_rank 是 5

在上面的示例中,dense_rank 從 1 開始,所以我希望在下一次運行中以 (5+1) 開始。

預期 output:假設我想從 10 開始dense_rank。

SYSTEM_ID    
     6
     7
     7
     8
     9
     9
     10

您可以存儲列中已有排名的最大值,並在下次運行時將該值添加到列中。

讓我向您展示我最終使用兩個不同的數據框做了什么,也許您可以使用它。

from pyspark.sql.functions import dense_rank, lit

w1 = Window.partitionBy('some_column').orderBy('some_column')
df1 = df.withColumn(
    'rank', dense_rank().over(w1)
)

prev_max = df1.select(f.max(f.col('rank'))).collect()[0][0]

w2 = Window.partitionBy('other_column').orderBy('other_column')
df = df.withColumn(
    'other_rank', dense_rank().over(w2) + lit(prev_max)
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM