2017-07-29 43 views
0

我有一個包含ID的列的文件。通常,ID只出現一次,但偶爾會與多個記錄關聯。我想計算一個給定的ID出現的次數,然後分成兩個單獨的dfs,這樣我就可以在兩者上運行不同的操作。一個df應該是ID只出現一次的地方,一個應該是ID多次出現的地方。在PySpark中出現值的次數進行過濾

我是能夠成功地算一筆ID出現了通過對ID分組,並加入數返回到原來的DF,像這樣的實例數量:

newdf = df.join(df.groupBy('ID').count(),on='ID') 

這工作得很好,因爲我得到一個輸出像這樣:

ID  Thing count 
287099 Foo  3 
287099 Bar  3 
287099 Foobar 3 
321244 Barbar 1 
333032 Barfoo 2 
333032 Foofoo 2 

但是,現在我想,讓我有一個DF分裂DF其中count = 1,並且計數> 1.下面及其變化沒有工作,但是:

singular = df2.filter(df2.count == 1) 

我得到一個'TypeError:條件應該是字符串或列'錯誤,而不是。當我嘗試顯示列的類型時,它說count列是一個實例。我如何讓PySpark以我需要的方式處理count列?

回答

2

計數是數據幀的方法,

>>> df2.count 
<bound method DataFrame.count of DataFrame[id: bigint, count: bigint]> 

當用作過濾器需要的列進行操作,如下面改變它,

singular = df2.filter(df2['count'] == 1)