使用 PySpark 在读取时过滤镶木地板文件

Filtering parquet file on read with PySpark

我在 AWS s3 中存储了一个巨大的分区镶木地板文件数据集,我只想使用 AWS EMR 从每个月的数据中读取一个样本。我必须按值过滤每个月的数据 "user_id" 选择,例如,来自 100.000 个用户(数百万)的数据并将聚合写回 s3。

我想出了如何使用 EMR 集群读取和写入 s3,但我在一个非常小的数据集上进行了测试。对于真实的数据集,我需要过滤数据才能对其进行处理。如何使用 pyspark 执行此操作?

Spark 有多个采样转换。 df.sample(...) 是您想要的那个。参见

如果您需要返回准确数量的结果,则必须 (a) 过度采样一点,然后 (b) 使用 df.limit() 获得准确数量。

如果您可以只处理一小部分,而不是目标计数,则可以节省 df.count