我有这个代码
from pyspark.sql.functions import *
df1=spark.read.option('header','true').csv('/FileStore/tables/ds_salaries.csv')\
`enter code here`.withColumn('salary',col('salary').cast('int'))
df1=df1.filter(col('salary')>30000)
df1=df1.groupBy('work_year').agg(sum('salary').alias('total_salary'))
display(df1)
当我执行这段代码时,我可以看到 jobs:3,但是这里只有 2 个操作,分别是 read 和 display(),那么为什么有一个额外的 job 以及它的用途是什么。我使用 databricks 社区版,其中它的单节点及其默认配置。
spark.read
被急切地评估,因为它需要找到列数和列名 ('header', 'true')
。内部与df.limit(1).collect()
类似。因此,您看到的第一个作业是读取第一行的作业。
第二个作业被触发用于显示(df)。
注意:如果您提供一组
inferSchema = true
,您将看到另外一个作业,该作业将用于查找每一列的数据类型,为此spark必须读取文件。如果您提供架构,那么它将只有一项工作用于 display(df)
。