在《星火燎原指南》一书中,比尔说,阅读是一种转变,而且是一种狭义的转变,
现在,如果我运行下面的spark代码并尝试查看spark UI,我会看到创建了一个作业df = spark.read.csv("path/to/file")
根据我的理解,作业是一个名为的操作。如果我在阅读CSV时尝试放入一些选项,我会在spark UI中看到多一个作业,因此,例如,当我们运行下面的代码时,在spark UI df = spark.read.option("inferSchema", "true").csv("path/to/file")
中有2个作业
所以我的问题是,如果spark.read
是一个转换,为什么它会创建Job?
2条答案
按热度按时间0sgqnhkj1#
根据您提供的参数,转换(尤其是读操作)可以有两种行为方式
1.自动评估-->将触发一个作业进行一些初始评估
如果是read.csv()
你可以在Spark UI中看到下面的WholeStageCodeGen:
x1c 0d1x的数据
你也可以看到物理平面图如下:
的
对于第二个作业,Spark UI中执行器的聚合指标将如下所示(突出显示读取的记录数):
iyzzxitl2#
与RDD相比,通过Catalyst的Spark Dataframes内置了一些智能。
其中之一是当你声明
infer schema
时,由于这可能需要很长时间,水下Spark已经启动了一个Job来进行模式推断。就这么简单。这是优化和性能方面的事情,不能被视为Action或Transformation。另一个例子是一个框架的旋转。