You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Databricks(PySpark)中用com.crealytics.spark.excel提取Excel工作表名

获取Azure Data Lake中Excel文件的工作表名

crealytics的spark-excel库本身没有提供直接返回工作表名的API,但可以通过以下两种方法实现需求:

方法一:利用spark-excel的元数据读取特性

当指定sheetName="__all__"时,读取后的DataFrame会自动添加_sheet_name列标识数据所属工作表。通过设置maxRows=0可以只读取元数据(不加载实际内容),高效提取表名:

# 仅加载元数据,不读取实际数据
sheet_metadata_df = spark.read.format("com.crealytics.spark.excel") \
               .option("header", "true")\
               .option("sheetName", "__all__")\
               .option("maxRows", 0)  # 限制仅读取表头和表名信息
               .load("abfss://dev@stopsdev.dfs.core.windows.net/file.xlsx")

# 提取并去重工作表名
sheet_names = sheet_metadata_df.select("_sheet_name").distinct().rdd.flatMap(lambda x: x).collect()
print(sheet_names)

方法二:直接用Apache POI解析Excel元数据

spark-excel底层依赖Apache POI库,可直接通过Spark的Hadoop文件系统API读取文件流,用POI解析工作表名:

from org.apache.poi.ss.usermodel import WorkbookFactory
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()
# 获取Hadoop文件系统实例
fs = spark._jvm.org.apache.hadoop.fs.FileSystem.get(spark._jsc.hadoopConfiguration())
file_path = spark._jvm.org.apache.hadoop.fs.Path("abfss://dev@stopsdev.dfs.core.windows.net/file.xlsx")

# 打开文件流并解析Excel
input_stream = fs.open(file_path)
workbook = WorkbookFactory.create(input_stream)

# 遍历获取所有工作表名
sheet_names = [workbook.getSheetName(i) for i in range(workbook.getNumberOfSheets())]
print(sheet_names)

# 关闭资源
input_stream.close()
workbook.close()

方法对比

  • 方法一:代码简洁,贴合Spark生态,无需额外依赖(已使用spark-excel),但依赖库的_sheet_name列特性。
  • 方法二:更直接,不依赖数据读取逻辑,但需要处理Java API调用,适合需要精细控制元数据读取的场景。

内容的提问来源于stack exchange,提问作者AzSurya Teja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 10:54:57