【问题标题】:Filtering on number of times a value appears in PySpark过滤值在 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 以我需要的方式处理计数列?

【问题讨论】:

    标签: python pyspark databricks


    【解决方案1】:

    count是dataframe的一种方法,

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

    如果过滤器需要一个列来操作,请按如下方式进行更改,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 2018-01-29
      • 2017-07-03
      • 2017-08-19
      相关资源
      最近更新 更多