在Synapse Notebook中用Python/PySpark访问on premise共享驱动器文件
访问本地共享驱动器文件的Python/PySpark实现方案
一、Python 原生实现
1. 读取共享驱动器上的CSV文件
共享驱动器路径在Windows下通常为\\server_name\shared_folder,Linux/macOS下可挂载后用本地路径或//server_name/shared_folder。用pandas直接读取:
import pandas as pd # 共享驱动器路径 shared_path = r"\\company-server\department-shares\sales\data.csv" # 读取CSV df = pd.read_csv(shared_path) print(df.head())
2. 读取并解压共享驱动器上的ZIP文件
如果ZIP包内包含单个CSV文件,可直接读取;若有多个文件,需遍历解压:
import zipfile import pandas as pd zip_path = r"\\company-server\department-shares\marketing\reports.zip" # 方式1:直接读取ZIP内的单个CSV df = pd.read_csv(zip_path, compression='zip') # 方式2:遍历ZIP内所有文件并处理 with zipfile.ZipFile(zip_path, 'r') as zip_ref: # 查看ZIP内文件列表 print(zip_ref.namelist()) # 读取指定文件 with zip_ref.open('monthly_report.csv') as f: df = pd.read_csv(f) # 或解压到临时目录(可选) zip_ref.extractall(r"C:\temp\extracted_reports")
权限注意事项
如果共享驱动器需要身份验证,可使用pywin32模块手动登录(仅Windows环境):
import win32net import win32netcon # 登录共享驱动器 server_name = "company-server" username = "domain\\your-username" password = "your-password" win32net.NetUseAdd( None, 2, { 'remote': f"\\\\{server_name}", 'username': username, 'password': password, 'domain': 'your-domain' }, win32netcon.USE_NEED_CONNECT ) # 之后即可正常访问共享路径
二、PySpark 实现
1. 读取共享驱动器上的CSV文件
确保Spark集群所有节点都能访问该共享驱动器(Windows节点需映射共享盘,Linux节点需挂载),路径写法如下:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("SharedDriveReader").getOrCreate() # 共享路径写法1:Windows风格 shared_csv_path = r"\\company-server\department-shares\operations\daily_data.csv" # 或写法2:用file://前缀(兼容跨平台) shared_csv_path = "file:////company-server/department-shares/operations/daily_data.csv" df = spark.read.csv(shared_csv_path, header=True, inferSchema=True) df.show(5)
2. 读取共享驱动器上的ZIP文件
Spark原生支持读取ZIP压缩的CSV文件(自动解压),如果ZIP内包含多个文件,可直接读取所有文件:
# 读取ZIP内的所有CSV文件 zip_path = r"\\company-server\department-shares\hr\employee_records.zip" df = spark.read.csv(zip_path, header=True, inferSchema=True) df.show(5) # 如果需要指定ZIP内的特定文件,可使用通配符 specific_file_path = r"\\company-server\department-shares\hr\employee_records.zip\2024_*.csv" df = spark.read.csv(specific_file_path, header=True, inferSchema=True)
集群模式注意事项
- 所有Worker节点必须能访问目标共享驱动器,否则会出现文件找不到的错误。
- 若使用YARN集群,需确保YARN用户拥有共享驱动器的访问权限。
- 避免在路径中使用中文或特殊字符,防止编码问题。
内容的提问来源于stack exchange,提问作者Dan Wang
相关产品推荐
相关产品推荐

