Spark读取OpenTargets Parquet文件时触发Py4JJavaError问题排查
问题排查与解决方案
针对你使用spark.read.parquet()读取ClinVar(EVA)数据集时出现的Py4JJavaError,以下是常见原因及解决办法:
1. 检查文件完整性与有效性
- 查看
/Users/xxxxx/Desktop/sourceId=eva目录下的文件,确认是否存在带.parquet后缀的分片文件,且文件大小符合预期(若下载中断,文件会远小于正常体积)。 - 用Parquet工具验证单个分片:
若工具报错,说明文件损坏,需重新下载。parquet-tools head /Users/xxxxx/Desktop/sourceId=eva/[具体parquet文件名]
2. 确认读取路径逻辑
OpenTargets的证据数据集采用分区式Parquet存储,sourceId=eva是分区目录而非单个Parquet文件:
- Spark支持直接读取分区目录,但前提是目录下所有文件都是有效的Parquet分片。若目录内存在非Parquet文件(如下载生成的临时文件、网页缓存),会触发报错。
3. 修正下载方式
用wget下载时,需注意数据集的分布式存储特性:
- 缺少递归参数会导致仅下载目录索引而非实际分片文件,需添加
-r(递归)和-np(不遍历父目录):wget -r -np [OpenTargets的EVA分区数据集URL] - 若曾中断下载,添加
-c参数断点续传,避免文件不完整:wget -c -r -np [OpenTargets的EVA分区数据集URL]
4. 验证Spark读取代码
确保代码指向正确的分区目录:
# 正确读取分区目录的写法 df = spark.read.parquet("/Users/xxxxx/Desktop/sourceId=eva/")
Spark会自动遍历目录下的所有Parquet分片并合并为DataFrame。
内容的提问来源于stack exchange,提问作者insomniac
相关产品推荐
相关产品推荐

