Databricks导入同结构多CSV文件合并为单表及路径问题排查
Databricks合并同结构CSV文件:路径错误修复与优化方案
常见路径错误原因
- Databricks工作区路径必须使用绝对路径格式,正确前缀为
/Workspace/(例如/Workspace/Users/your-email@domain.com/Data/),而非自定义的模糊路径描述 - 路径大小写敏感,需严格匹配目录/文件名的大小写
- 当前执行用户无目标目录的读取权限
修正后的代码(含效率优化)
from pyspark.sql import SparkSession from pyspark.sql.functions import col # Databricks环境下可省略SparkSession初始化,默认已提供 spark = SparkSession.builder.appName("CombineCSVFiles").getOrCreate() # 替换为你的工作区绝对路径 workspace_path = "/Workspace/Users/your-email@domain.com/Data/" # 直接读取整个目录下的CSV文件(Spark自动合并同结构文件,无需循环读取) combined_df = spark.read.option("header", "true") \ .option("inferSchema", "false") # 若已知字段类型,建议手动指定Schema以避免推断错误 .csv(workspace_path) # 转换datetime列为Timestamp类型 combined_df = combined_df.withColumn("datetime", col("datetime").cast("timestamp")) # 按datetime字段排序 sorted_df = combined_df.orderBy(col("datetime")) # 预览合并结果 sorted_df.show() # 保存为Delta表(添加overwrite模式避免重复运行时报错) sorted_df.write.format("delta").mode("overwrite").saveAsTable("combined_sorted_table")
关键优化与验证说明
- 直接读取目录:Spark原生支持读取目录路径,自动遍历所有同结构CSV并合并,比循环读取+Union更高效,还能避免单个文件路径的拼写错误
- 路径验证:若仍不确定路径是否正确,可先执行以下代码确认目录内容:
display(dbutils.fs.ls(workspace_path))
- Schema控制:如果已知CSV的字段结构,建议手动定义Schema(例如
.schema(your_custom_schema)),禁用自动推断可提升读取速度并保证类型一致性
内容的提问来源于stack exchange,提问作者Worstenbrood96
相关产品推荐
相关产品推荐

