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

在Databricks中用变量指定Spark Excel的dataAddress读取ADLS Gen1文件

解决方法

一、用变量动态指定dataAddress范围

你原代码里的变量写法不会被自动解析,需要通过字符串拼接把变量值插入到dataAddress参数中,Python里常用两种实现方式:

方式1:f-string(Python 3.6+支持)

var_A = 'B1'
var_B = 'C3'
# 用f-string拼接动态地址
data_address = f"'Sheet1'!{var_A}:{var_B}"
spark_df = spark.read.format("com.crealytics.spark.excel")\
    .option("dataAddress", data_address)\
    .option("header", False)\
    .load('/mnt/adls/your_actual_path')  # 替换为实际的ADLS挂载路径

方式2:str.format()方法

var_A = 'B1'
var_B = 'C3'
data_address = "'Sheet1'!{}:{}".format(var_A, var_B)
spark_df = spark.read.format("com.crealytics.spark.excel")\
    .option("dataAddress", data_address)\
    .option("header", False)\
    .load('/mnt/adls/your_actual_path')

两种方式都能正确将变量值替换到地址字符串中,实现动态指定Excel单元格范围。

二、其他读取ADLS Gen1中Excel文件到DataFrame的方法

如果spark_excel的方式不符合需求,还可以用以下两种常用方法:

方法1:Pandas读取后转Spark DataFrame

利用Pandas读取挂载在Databricks的ADLS文件,再转换为Spark DataFrame:

import pandas as pd

# 直接读取指定sheet和单元格范围
pd_df = pd.read_excel('/dbfs/mnt/adls/your_actual_path/your_file.xlsx', 
                      sheet_name='Sheet1', 
                      usecols='B:C', 
                      skiprows=0, 
                      nrows=3)
# 转换为Spark DataFrame
spark_df = spark.createDataFrame(pd_df)

如果需要用变量动态调整范围,可修改参数:

start_col = 'B'
end_col = 'C'
start_row = 1
row_count = 3

pd_df = pd.read_excel('/dbfs/mnt/adls/your_actual_path/your_file.xlsx', 
                      sheet_name='Sheet1', 
                      usecols=f'{start_col}:{end_col}', 
                      skiprows=start_row-1,  # skiprows为跳过的行数,B1对应跳过0行
                      nrows=row_count)
spark_df = spark.createDataFrame(pd_df)

方法2:openpyxl精细读取后构造DataFrame

用openpyxl直接操作Excel单元格,再手动构造DataFrame:

from openpyxl import load_workbook
import pandas as pd

# 加载Excel文件
wb = load_workbook('/dbfs/mnt/adls/your_actual_path/your_file.xlsx')
ws = wb['Sheet1']

# 指定单元格范围
start_cell = 'B1'
end_cell = 'C3'
# 提取范围内的单元格数据
data = []
for row in ws[start_cell:end_cell]:
    data.append([cell.value for cell in row])

# 转换为Spark DataFrame
pd_df = pd.DataFrame(data)
spark_df = spark.createDataFrame(pd_df)

注意:以上方法均需确保ADLS Gen1已正确挂载到Databricks,且你拥有对应文件的读取权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:45:36