2017-07-29 99 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)