【问题标题】:pyspark Drop rows in dataframe to only have X distinct values in one columnpyspark 删除数据框中的行以在一列中只有 X 个不同的值
【发布时间】:2021-02-12 19:34:58
【问题描述】:

所以我有一个带有“类别”列的数据框,它有超过 12k 个不同的值,出于抽样目的,我想获得一个小样本,其中该类别列只有 1000 个不同的值。

在我做之前:

small_distinct = df.select("category").distinct().limit(1000).rdd.flatMap(lambda x: x).collect()
df = df.where(col("category").isin(small_distinct))

我知道这是非常低效的,因为我正在对类别列进行区分,然后将其转换为普通的 python 列表,这样我就可以使用isin() 过滤器。

有没有“火花”的方式来做到这一点?我想也许带有rolloverwindows的东西可以完成这项工作?但我无法解决它

谢谢!

【问题讨论】:

    标签: python apache-spark pyspark


    【解决方案1】:

    您可以使用 left_semi join 改进您的代码:

    small_distinct = df.select("category").distinct().limit(1000)
    df = df.join(small_distinct, "category", "left_semi")
    

    使用 left_semi 是一种使用另一个表过滤表的好方法,保持相同的架构,以一种有效的方式。

    【讨论】:

      猜你喜欢
      • 2016-01-13
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2017-01-15
      • 2019-07-17
      相关资源
      最近更新 更多