为什么Spark在没有调用任何动作的情况下读取数据?

Why does Spark read data even no actions are called?

我在使用 spark.read.json 时对 Spark 上的延迟加载感到困惑。

我有以下代码:

df_location_user_profile = [
    f"hdfs://hdfs_cluster:8020/data/*/*"
]
df_json = spark.read.json(json_data_files)

虽然 HDFS 上的 JSON 数据按年和月(年=yyyy,月=mm)分区,但我想检索该数据集的所有数据。 对于这个代码块,我只从定义的位置读取数据并且没有执行任何操作。但是我在 Spark UI 上发现了具有巨大输入数据的下一个阶段。

据我了解,Spark 的延迟加载方式在调用操作之前不会读取数据。那么这让我很困惑。

之后,我调用 count() 操作,然后创建新阶段,Spark 再次读取数据。

我的问题是,为什么 Spark 在没有调用任何操作时(在第一个作业,阶段)读取数据?我该如何优化它?

它正在通过评估未提供的模式。又名推断模式。