Azure Databricks Scala:无需Union/Join合并多类别Parquet至单DataFrame
批量读取多目录Parquet数据到单个DataFrame(Scala + Azure Databricks)
你不需要写循环,Spark原生支持通配符路径来批量读取数据,这比循环+Union高效得多,完全符合你的需求——不用Union/Join,还能自动适配未来Categories的增减。
核心解决方案:通配符路径读取
直接用*匹配India下的所有Categories目录,Spark会自动遍历所有匹配路径并合并成单个DataFrame:
// Databricks中SparkSession已自动初始化,无需手动创建 val allCategoriesDF = spark.read.parquet( "/mnt/adls/Centrallake/ExternalSources/Nilesh/BlobFileShare/India/*/Processed_Parquet" ) // 查看数据和Schema allCategoriesDF.show(5) allCategoriesDF.printSchema()
处理Schema不一致的情况
如果不同Categories下的Parquet文件Schema有差异(比如新增/缺失列),可以开启Schema合并选项,自动兼容不同结构的数据:
val allCategoriesDF = spark.read .option("mergeSchema", "true") .parquet("/mnt/adls/Centrallake/ExternalSources/Nilesh/BlobFileShare/India/*/Processed_Parquet")
为什么不用循环?
循环读取每个目录再合并需要手动调用unionAll/union,不仅代码繁琐,性能也不如Spark原生的批量读取——Spark会对通配符路径做优化,一次性扫描所有文件,避免多次IO操作。而且通配符路径能自动适配Categories的增减,不需要修改代码。
内容的提问来源于stack exchange,提问作者Nilesh Patel
相关产品推荐
相关产品推荐

