火花中的“加载”命令是动作还是转换?

时间:2019-10-15 10:56:39

标签: apache-spark pyspark

df = spark.read.format('csv').load('...')

据我了解,load是一个转换,仅在调用动作时才执行。但是,在执行load语句时,它似乎是Spark UI下的一个动作。

编辑:

从评论/答案中,我推断负载可能是也可能不是转换,但不是绝对是一项很棒且可以理解的动作。

如果不是动作,为什么要创建DAG? 它不仅为WholeStageCodegen(位于SQL选项卡中),还为装入语句创建DAG。 请看下图: Screenshot

2 个答案:

答案 0 :(得分:1)

具体地,根据您的评论:

  

加载不执行任何操作。它只是sqlContext.read的一部分或   spark.read.format API作为参数,可以间接设置或   直接读。读取允许指定数据格式。

DF或底层RDD的评估很懒惰。

答案 1 :(得分:0)

Load既不是动作也不是变换,它是DataFrameReader类的方法 描述了如何从外部数据源加载数据。

DataFrameReader的所有方法仅描述加载数据的过程,并且不会触发Spark作业(直到调用动作)。

jaceklaskowski提到了这一点,请阅读https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-DataFrameReader.html#methods

您还可以在此处引用数据块中的转换和操作API列表 https://training.databricks.com/visualapi.pdf负载在任何地方都没有提到是一种转换或动作