如何用PySpark将NAS的.xlsx文件加载至Azure Databricks及相关疑问
关于PySpark读取NAS中Excel文件到Azure Databricks的问题解答
一、操作可行性
完全可行,但需满足两个核心前提:
- Databricks集群所在虚拟网络与NAS存储网络连通(支持SMB/NFS等协议);
- 安装Excel文件解析所需的依赖库(PySpark原生不支持Excel格式)。
二、PySpark读取NAS中.xlsx文件的具体步骤
1. 挂载NAS存储到Databricks DBFS
以SMB协议为例,通过dbutils工具将NAS共享目录挂载到Databricks的DBFS路径:
# 配置NAS连接参数 nas_smb_path = "//your-nas-server-name/your-share-folder" nas_username = "nas-account-username" nas_password = "nas-account-password" # 挂载到DBFS指定路径 dbutils.fs.mount( source=nas_smb_path, mount_point="/mnt/nas-excel-storage", extra_configs={ "fs.smb.account.name": nas_username, "fs.smb.account.key": nas_password } )
挂载完成后,可通过dbutils.fs.ls("/mnt/nas-excel-storage")验证是否能访问NAS中的文件。
2. 安装Excel解析依赖库
推荐使用crealytics/spark-excel库,支持直接通过PySpark读取Excel:
- 在Databricks集群的「库」页面,添加Maven坐标:
com.crealytics:spark-excel_2.12:0.13.7(注意对应集群的Scala版本,2.12为常见版本); - 或通过pip安装:
pip install pyspark-excel(适合单节点测试场景)。
3. 读取Excel文件到Spark DataFrame
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("ReadNASExcel").getOrCreate() # 读取Excel文件,支持表头、自动推断Schema excel_df = spark.read.format("com.crealytics.spark.excel") \ .option("header", "true") \ .option("inferSchema", "true") \ .option("dataAddress", "'Sheet1'!A1") # 指定读取的工作表及起始位置(可选) .load("/mnt/nas-excel-storage/your-target-file.xlsx") # 验证数据 excel_df.show(5)
如果是小文件,也可以用Pandas读取后转换为Spark DataFrame:
import pandas as pd pd_df = pd.read_excel("/dbfs/mnt/nas-excel-storage/your-target-file.xlsx") spark_df = spark.createDataFrame(pd_df)
三、替代方案
- ADF中转同步:利用已配置的ADF NAS链接服务,创建复制活动将Excel文件同步到ADLS Gen2或Blob Storage,再由Databricks读取云存储中的文件。该方案适合大文件批量处理,且能借助ADF的调度能力实现自动化。
- Python原生库解析:使用
openpyxl或xlrd库直接读取NAS挂载路径下的Excel文件,完成复杂格式解析后再转换为Spark DataFrame,适合需要处理合并单元格、复杂公式等特殊场景。 - 创建外部表:挂载NAS后,通过Spark SQL创建外部表指向Excel文件,方便后续直接用SQL查询:
CREATE TABLE nas_excel_table USING com.crealytics.spark.excel OPTIONS ( path "/mnt/nas-excel-storage/your-target-file.xlsx", header "true", inferSchema "true" )
四、能否复用ADF的NAS链接服务在Databricks中获取文件?
不能直接复用。ADF的链接服务是ADF专属的配置资源,Databricks无法直接调用或读取其配置信息。但可以通过以下间接方式利用现有配置:
- 从ADF链接服务中提取NAS的连接参数(服务器地址、共享路径、账号密码),在Databricks中用这些参数挂载NAS;
- 通过ADF的复制活动或数据流动,将NAS中的Excel文件同步到云存储(如ADLS Gen2),再让Databricks读取云存储中的文件,这也是最常用的联动方式。
内容的提问来源于stack exchange,提问作者dev_code
相关产品推荐
相关产品推荐

