在AWS Databricks(Python 3.9.5)中用PySpark拆分多Sheet Excel为多个文件
在AWS Databricks(Python 3.9.5)拆分多工作表Excel为单个文件
前置准备
- 安装Spark Excel依赖:在Notebook中执行以下命令,安装后重启内核生效
%pip install spark-excel
或者通过集群库管理添加Maven包:com.crealytics:spark-excel_2.12:0.14.0(需匹配集群Spark的Scala版本)
实现代码
# 获取源Excel的所有工作表名称 sheet_names_df = spark.read \ .format("com.crealytics.spark.excel") \ .option("header", "false") \ .option("inferSchema", "false") \ .option("sheetName", "__ALL_SHEETS__") \ .load("dbfs:/mnt/your-storage/source_file.xlsx") # 替换为你的源文件路径(支持DBFS/S3) sheet_names = sheet_names_df.select("sheet_name").distinct().rdd.flatMap(lambda x: x).collect() # 遍历每个工作表,导出为独立Excel文件 for sheet in sheet_names: # 读取当前工作表数据 df = spark.read \ .format("com.crealytics.spark.excel") \ .option("header", "true") \ .option("inferSchema", "true") \ .option("sheetName", sheet) \ .load("dbfs:/mnt/your-storage/source_file.xlsx") # 定义输出路径(每个工作表对应一个文件) output_path = f"dbfs:/mnt/your-storage/output/{sheet}.xlsx" # 保存文件 df.write \ .format("com.crealytics.spark.excel") \ .option("header", "true") \ .option("sheetName", sheet) \ .mode("overwrite") \ .save(output_path) print(f"工作表 {sheet} 已导出至 {output_path}")
重要提示
- 路径配置:替换代码中的源路径和输出路径,支持DBFS(
dbfs:/...)或已挂载的S3路径,确保集群有对应存储的读写权限 - 参数调整:根据Excel实际结构调整
header(是否有表头)、inferSchema(是否自动推断字段类型),若表头不在第一行,添加option("startRow", n)指定起始行 - 版本兼容:Spark Excel的版本需匹配集群的Scala和Spark版本,比如Spark 3.x对应Scala 2.12,使用
0.14.0版本的依赖包
内容的提问来源于stack exchange,提问作者Salman
相关产品推荐
相关产品推荐

