过滤值在 PySpark 中出现的次数
Posted
技术标签:
【中文标题】过滤值在 PySpark 中出现的次数【英文标题】:Filtering on number of times a value appears in PySpark 【发布时间】:2017-07-29 23:49:11 【问题描述】:我有一个文件,其中有一列包含 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)
我得到一个“类型错误:条件应该是字符串或列”错误。当我尝试显示列的类型时,它说计数列是一个实例。如何让 PySpark 以我需要的方式处理计数列?
【问题讨论】:
【参考方案1】:count是dataframe的一种方法,
>>> df2.count
<bound method DataFrame.count of DataFrame[id: bigint, count: bigint]>
如果过滤器需要一个列来操作,请按如下方式进行更改,
singular = df2.filter(df2['count'] == 1)
【讨论】:
以上是关于过滤值在 PySpark 中出现的次数的主要内容,如果未能解决你的问题,请参考以下文章