在Pyspark中,当groupBy与partitionBy中使用的列相同时,会发生什么



我有一个按列ID分区并写入磁盘的数据集。这导致每个分区在文件系统中都有自己的文件夹。现在我正在读取这些数据,并想调用groupBy('ID'),然后调用pandas_udf函数。我的问题是,既然数据是由ID分区的,那么groupBy('ID')是否比没有分区的情况更快?例如,使用文件夹结构一次读取一个ID会更好吗?我担心groupBy操作会查看每一条记录,即使它们已经被分区了。

  1. 您已通过ID分区并保存到磁盘
  2. 你再读一遍,想分组并应用pandas udf

很明显,groupby会查看每一条记录,大多数函数也是如此。但是使用pandas_udf(groupby("ID")(将是昂贵的,因为它将经历不必要的洗牌。

您可以使用groupbyspark_partition_id()来优化性能,因为您已经按要在上分组的列进行了分区

编辑:

如果你想要文件名,你可以尝试:

from  pyspark.sql.functions import input_file_name
df.withColumn("filename", input_file_name())

最新更新