Databricks中仅创建DataFrame却触发两个运行任务的原因咨询
为什么未调用Action操作却有Spark任务运行?
你看到任务运行的核心原因是启用了inferSchema = True,这个参数会让Spark自动推断CSV文件的列类型,而推断过程需要读取部分数据,这就触发了隐式的计算任务。
具体细节:
- 当设置
inferSchema=True时,Spark不会只解析表头,它需要扫描文件的部分内容(默认是前100行,可通过配置参数调整),以此判断每列对应的数据类型(比如整数、浮点数、日期等)。 - 这个扫描数据的过程属于隐式的Action操作,会触发Spark Job和Task执行。你看到的两个任务,大概率是因为你的CSV文件被分成了两个数据分区,每个分区对应一个Task。
- 如果把
inferSchema改为默认的False,Spark会把所有列都识别为字符串类型,这时候不需要读取数据做类型推断,也就不会触发任务。
优化建议
如果想避免这种隐式任务,推荐提前手动定义Schema,而不是依赖自动推断,示例代码如下:
from pyspark.sql.types import StructType, StructField, StringType, TimestampType # 根据你的Uber数据结构定义Schema schema = StructType([ StructField("Date/Time", TimestampType(), nullable=True), StructField("Lat", StringType(), nullable=True), StructField("Lon", StringType(), nullable=True), StructField("Base", StringType(), nullable=True) ]) df = spark.read.csv("/FileStore/tables/uber_data.csv", header=True, schema=schema)
内容的提问来源于stack exchange,提问作者Kshitish Das
相关产品推荐
相关产品推荐

