我需要在PySpark中解压缩1.6G文件。
我尝试过按照以下方式做事:
unzipped_files = sc.union( \
[sc.binaryFiles(path) for path in paths]) \
.flatMap(lambda kv: unzip_file(kv) \
)
其中paths
是文件路径列表(目前只有一个元素),而unzip_file
看起来像是这样的:
zipped_file_obj = zipfile.ZipFile(io.BytesIO(zipped_file[1]), "r")
return [
zipped_file_obj.open(filename).read()
for filename in zipped_file_obj.namelist()
]
但是我得到的unzipped_files
RDD完全无法使用。像.isEmpty()
这样简单的事情会导致作业被关闭,而py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.runJob.
这样的消息对我来说并没有帮助。
即使我尝试执行以下操作:
file = sc.binaryFiles(paths[0])
也是一个完全无法使用的RDD。我要把头发拉出来。文件太大了吗?