我有一个按列ID
分区并写入磁盘的数据集。这导致每个分区在文件系统中都有自己的文件夹。现在我正在读取这些数据,并想调用groupBy('ID')
,然后调用pandas_udf
函数。我的问题是,既然数据是由ID
分区的,那么groupBy('ID')
是否比没有分区的情况更快?例如,使用文件夹结构一次读取一个ID
会更好吗?我担心groupBy
操作会查看每一条记录,即使它们已经被分区了。
- 您已通过
ID
分区并保存到磁盘 - 你再读一遍,想分组并应用pandas udf
很明显,groupby
会查看每一条记录,大多数函数也是如此。但是使用pandas_udf
(groupby("ID")
(将是昂贵的,因为它将经历不必要的洗牌。
您可以使用groupby
spark_partition_id()
来优化性能,因为您已经按要在上分组的列进行了分区
编辑:
如果你想要文件名,你可以尝试:
from pyspark.sql.functions import input_file_name
df.withColumn("filename", input_file_name())