如何在流中读取多个 .zip 文件夹,通过 Spark 解压缩和写入流中每个文件包含的解压缩文件夹?

How to read in stream multiple .zip folder, unzip and write in stream each files contains by unzipp folder through Spark?

我有包含 zip 文件的存档,我想打开 'through' Spark 在流式传输中并在流式传输中写入解压缩文件在其他目录中,kip 文件的名称(一个接一个)。

    import zipfile
import io

def zip_extract(x):
    in_memory_data = io.BytesIO(x[1])
    file_obj = zipfile.ZipFile(in_memory_data, "r")
    files = [i for i in file_obj.namelist()]
    return dict(zip(files, [file_obj.open(file).read() for file in files]))

有没有一种简单的方法可以在流中读写上述代码?感谢您的帮助。

据我所知,Spark 无法立即读取存档。 ZIP 文件既是归档又是压缩数据。如果可以,请使用 gzip 之类的程序来压缩数据,但将每个文件分开,因此不要将多个文件归档到一个文件中。

如果存档是给定的,并且不能更改。您可以考虑使用 sparkContext.binaryFiles(https://spark.apache.org/docs/latest/api/scala/org/apache/spark/index.html) 读取它,这将允许您将压缩文件保存在 spark 的字节数组中,因此您可以编写一个可以解压缩和 return 的映射器函数文件的内容。然后,您可以展平该结果以获得文件内容的 RDD。