2016-05-23 113 views
1

我有一個數據幀,列時間,a,b,c,d,val。 我想創建一個數據框,包含額外的列,它將包含每個組內的行的行號,其中a,b,c,d是組密鑰。pyspark行號數據幀

我試圖與火花SQL中,通過定義一個窗口功能,特別是在SQL它看起來就像這樣:

select time, a,b,c,d,val, row_number() over(partition by a,b,c,d order by  time) as rn from table 
group by a,b,c,d,val 

我想這樣做對數據幀itslef,而無需使用sparksql。

謝謝

+0

你是什麼意思_without使用sparksql_? – zero323

回答

3

我不知道python api太多了,但我會試試看。你可以嘗試這樣的:

from pyspark.sql import functions as F 

df.withColumn("row_number", F.row_number().over(Window.partitionBy("a","b","c","d").orderBy("time"))).show() 
+0

是的,就像我一樣,你錯過了分區部分,df = df.withColumn(「id」,F.rowNumber()。over(Window.partitionBy(「a」,「b」,「c」, 「d」)。orderBy(col(「time」)))),但我想這樣做沒有。謝謝 – matlabit

+0

請注意,spark <= 1.6使用不同的函數名rowNumber() –

+0

很好的答案,但你忘了一些括號: F.row_number()。over ... – laguittemh