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

PySpark 3.1.2读取HTTPS URL下.tsv.gz文件报错如何解决

问题原因

Spark 内置的文件读取接口仅支持本地文件系统、HDFS、对象存储(S3/OSS等)等原生适配的存储协议,不支持直接传入HTTP/HTTPS URL读取网络文件,因此会抛出UnsupportedOperationException报错。

可行解决方案

方案1:小文件场景,先下载到本地再读取

适合文件体积不大的场景,先通过Python的网络请求库将文件下载到本地路径,再调用Spark接口读取:

import requests
from pyspark.sql import SparkSession

def create_spark_session():
    return SparkSession.builder.appName("wikipediaClickstream").getOrCreate()

spark = create_spark_session()
url = "https://dumps.wikimedia.org/other/clickstream/2017-11/clickstream-jawiki-2017-11.tsv.gz"
local_temp_path = "/tmp/clickstream-jawiki-2017-11.tsv.gz"

# 流式下载文件避免内存占用过高
resp = requests.get(url, stream=True)
with open(local_temp_path, "wb") as f:
    for chunk in resp.iter_content(chunk_size=1024*1024):
        if chunk:
            f.write(chunk)

# Spark自动识别gz压缩格式,无需额外配置解压参数
df = spark.read.option("sep", "\t").option("header", "false").csv(local_temp_path)
df.show(10)

方案2:小文件场景,通过Pandas中转读取

如果不想留存本地临时文件,可以用Pandas直接读取网络文件,再转为Spark DataFrame:

import pandas as pd
from pyspark.sql import SparkSession

def create_spark_session():
    return SparkSession.builder.appName("wikipediaClickstream").getOrCreate()

spark = create_spark_session()
url = "https://dumps.wikimedia.org/other/clickstream/2017-11/clickstream-jawiki-2017-11.tsv.gz"

pandas_df = pd.read_csv(url, sep="\t", compression="gzip", header=None)
df = spark.createDataFrame(pandas_df)
df.show(10)

注意:该方案会将全量数据加载到Driver节点内存,仅适合GB级以下的小文件使用,文件过大会导致Driver内存溢出。

方案3:大文件/分布式集群场景

如果是生产环境处理大量网络文件,先将所有文件批量下载到HDFS或者集群可访问的分布式存储中,再用Spark读取对应的分布式存储路径即可,避免单节点下载的性能瓶颈和容量限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:54:04