如何用PySpark读取hetionet-v1.0-edges.sif.gz文件?解决类型转换报错
解决PySpark读取hetionet压缩边文件的ClassCastException错误
你遇到的java.lang.ClassCastException是因为Spark的load()方法不支持直接传入gzip.GzipFile对象,它需要的是文件路径(本地或分布式存储路径),而非内存中的文件对象。以下是两种可行的读取方案:
方案1:直接让Spark读取远程压缩URL
Spark原生支持gzip压缩文件的读取,无需手动解压缩,直接传入文件URL即可:
edges_df = spark.read.format("csv") \ .option("delimiter", "\t") \ .option("inferSchema", "true") \ .option("header", "true") \ .load("https://github.com/hetio/hetionet/raw/master/hetnet/tsv/hetionet-v1.0-edges.sif.gz")
方案2:先下载到本地再读取
如果需要先本地缓存文件,可以先将压缩文件下载到本地临时路径,再让Spark读取:
import requests import os url = "https://github.com/hetio/hetionet/raw/master/hetnet/tsv/hetionet-v1.0-edges.sif.gz" local_temp_path = "/tmp/hetionet-edges.sif.gz" # 下载文件到本地 response = requests.get(url) with open(local_temp_path, "wb") as f: f.write(response.content) # Spark读取本地压缩文件 edges_df = spark.read.format("csv") \ .option("delimiter", "\t") \ .option("inferSchema", "true") \ .option("header", "true") \ .load(local_temp_path) # 可选:清理临时文件 os.remove(local_temp_path)
说明
Spark的CSV数据源会自动识别gzip压缩格式,无需额外配置解压缩参数,只需确保路径指向正确的压缩文件即可。
内容的提问来源于stack exchange,提问作者user3138864
相关产品推荐
相关产品推荐

