为什么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 在没有调用任何操作时(在第一个作业,阶段)读取数据?我该如何优化它?
它正在通过评估未提供的模式。又名推断模式。
我在使用 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 在没有调用任何操作时(在第一个作业,阶段)读取数据?我该如何优化它?
它正在通过评估未提供的模式。又名推断模式。