过滤值在 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 中出现的次数的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 pyspark 过滤 Spark DataFrames 以返回列值在列表中的所有行?

惯用地查找给定值在数组中出现的次数

计算每个值在 PostgreSQL 表中出现的次数?

计数值在组 R 中出现的次数

pyspark:计算列表中不同元素的出现次数

计算一个值在 Hive/SQL 中连续出现的次数