[英]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.