pyspark将dataframe中的行删除为一列中只有x个不同的值

jum4pzuy  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(296)

所以我有一个Dataframe,有一个列“category”,它有超过12k个不同的值,为了采样的目的,我想得到一个小样本,其中这个category列只有1000个不同的值。
在我做之前:

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

我知道这是非常低效的,因为我正在做一个独特的category列,然后将它转换到一个普通的python列表中,这样我就可以使用 isin() 过滤器。
有什么“Spark”的方法吗?我想也许可以用摇窗的方法来做这个工作?但我不能解决它
谢谢!

ddrv8njm

ddrv8njm1#

您可以使用左\u半联接来改进代码:

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

使用left\ u semi是一种很好的方法,可以高效地使用另一个表过滤表,保持相同的模式。

相关问题