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

在Databricks 8.3(Spark3.1.1)环境下PySpark读取URL内容失败如何解决

根因说明

你原本使用的spark.sparkContext.addFile()仅会将目标文件下载到Databricks集群的驱动节点本地磁盘,Spark读取文件时任务是下发到Executor节点执行的,Executor节点本地不存在该文件,因此触发文件不存在的读取错误。该接口本身设计用于分发作业依赖的小体积配置、脚本文件,不适用于分发待读取的业务数据。

可行解决方案

方案1:小体积文件直接读取(单文件小于1GB适用)

直接用Python requests库拉取文件内容,转成Spark DataFrame,无需落地到存储:

import requests
from pyspark.sql.types import StringType

url = 'https://pds-atmospheres.nmsu.edu/PDS/data/mors_1101/tps/1998_028/8028d38a.tps'
resp = requests.get(url)
# 先校验请求是否正常,可提前排查网络权限问题
resp.raise_for_status()
# 按行拆分内容直接构造DataFrame
df1 = spark.createDataFrame(resp.text.splitlines(), StringType()).toDF("value")
df1.show()

方案2:大体积文件落地DBFS读取(单文件大于1GB适用)

先将文件下载到驱动本地,再转存到所有节点都可访问的DBFS共享存储,再用Spark读取:

import requests

url = 'https://pds-atmospheres.nmsu.edu/PDS/data/mors_1101/tps/1998_028/8028d38a.tps'
local_path = "/tmp/8028d38a.tps"
dbfs_path = "/data/8028d38a.tps"

# 下载到驱动节点本地
resp = requests.get(url)
resp.raise_for_status()
with open(local_path, "wb") as f:
    f.write(resp.content)

# 转存到DBFS共享路径
dbutils.fs.cp(f"file:{local_path}", f"dbfs:{dbfs_path}")

# 从DBFS读取文件
df1 = spark.read.text(dbfs_path)
df1.show()
前置校验项

如果运行上述代码仍报错,先执行以下命令排查网络权限:

import requests
url = 'https://pds-atmospheres.nmsu.edu/PDS/data/mors_1101/tps/1998_028/8028d38a.tps'
print(requests.get(url).status_code)

如果返回值不是200,说明集群没有公网访问该域名的权限,需联系集群管理员开通对应域名的公网访问权限或配置出口代理。

内容的提问来源于stack exchange,提问作者Alex Raj Kaliamoorthy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:15:06