我有一个包含ID的列的文件。通常,ID只出现一次,但有时候,它们与多个记录相关联。我想计算给定ID出现的次数,然后分成两个单独的dfs,这样我就可以对它们进行不同的操作。一个df应该是ID只出现一次的地方,一个应该是ID出现多次的地方。
通过对ID进行分组并将计数重新加入原始df,我能够成功计算ID出现的实例数,如下所示:
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,并且count> 1.然而,以下及其变体并不起作用:
singular = df2.filter(df2.count == 1)
我得到一个' TypeError:条件应该是字符串或列'而是错误。当我尝试显示列的类型时,它表示count列是一个实例。我怎样才能让PySpark按照我需要的方式处理count列?
答案 0 :(得分:2)
count是dataframe的一种方法,
>>> df2.count
<bound method DataFrame.count of DataFrame[id: bigint, count: bigint]>
如果过滤器需要操作列,请按如下所示进行更改,
singular = df2.filter(df2['count'] == 1)