2017-02-07 54 views
1

我是Spark的新手,我試圖將groupbycount應用於我的數據框dfusers屬性。pyspark中的計數和groubpy等效

import pandas as pd 

comments = [ (1, "Hi I heard about Spark"), 
    (1, "Spark is awesome"), 
    (2, None), 
    (2, "And I don't know why..."), 
    (3, "Blah blah")] 

df = pd.DataFrame(comments) 
df.columns = ["users", "comments"] 

這看起來這是大熊貓

 users     comments 
0  1 Hi I heard about Spark 
1  1   Spark is awesome 
2  2      None 
3  2 And I don't know why 
4  3    Blah blah 

我想找到下面的大熊貓代碼的等效pyspark

df.groupby(['users'])['users'].transform('count') 

輸出看起來是這樣的:

0 2 
1 2 
2 2 
3 2 
4 1 
dtype: int64 

你能幫忙嗎我怎麼能在PySpark執行這個?

回答

1

這應該在pyspark工作:df.groupby('user').count()。在pyspark groupby()groupBy()Pyspark docs are pretty easy reading with some good examples.

UPDATE別名:

現在我明白了要求更好一點,它不會出現pyspark具有就地transform支持呢。 See this answer.

但是你可以通過連接來完成。

df2=df.groupby('users').count() 
df.join(df2, df.users==df2.users, "left")\ 
    .drop(df2.users).drop(df.comments) 

+-----+-----+ 
|users|count| 
+-----+-----+ 
| 1| 2| 
| 1| 2| 
| 3| 1| 
| 2| 2| 
| 2| 2| 
+-----+-----+ 
+0

謝謝@data_steve。我認爲我的問題在'變換'部分。我想將計數值作爲新列(或「用戶」列)插入同一個數據框中。無論如何簡單的方法來做到這一點? – MomoPP

+0

@MomoPP通常你會舉一個小數據例子來說明你的意思,無論你從哪裏開始,你想要輸出什麼樣子。我在你的文章中用這個措詞'用計數值替換'有點困惑。它指的是:用戶列還是數據框? –

+1

非常感謝史蒂夫,因爲你不喜歡我,並幫助我走出這裏。對不起,以前沒有提供有關此問題的足夠細節。現在完全合理。優秀作品。 – MomoPP