我读到 repartition() 将被延迟评估,因为它是一种转换,并且转换仅在操作上触发。
但是,我认为在基于列值进行任何重新分区之前,Spark 必须先加载所有数据。换句话说,我的理解是,所有数据仍将按原样加载,不进行任何重新分区或优化,只有这样 Spark 才会进行重新分区。并且无论如何,repartition() 都会始终对数据进行混洗,即使在触发任何操作之前调用它也是如此。我的理解正确吗?
df = spark.createDataFrame(data, ["id", "name", "age"])
repartitioned_df = df.repartition("age")
... # action triggered later