问题是我的azure数据湖存储中有一个zip文件,无法在数据块中处理。我得到的是BadZipFile: Bad magic number for central directory
,但是,我已经将其下载到本地计算机,并且可以使用相同的zipfile.ZipFile
来打开它。我的猜测是sc.binaryFiles
有什么用,但我真的无法弄清楚是什么。
my_zip = sc.binaryFiles(path)
#my_zip is an rdd so I have to get a filename and the content this way...
filename = my_zip.take(1)[0][0]
contents = my_zip.take(1)[0][1]
inMemory = io.BytesIO(contents)
with zipfile.ZipFile(inMemory, "r") as zf:
print ("zipfile is OK")
BadZipFile: Bad magic number for central directory
文件开头为:
b'PK\x05\x06\x00\x00\x00\x00\xfd\x07\xfd\x07w8\x05\x00@\xb5\xc2\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00H\xf6i\xb0#S\x0b\x04\xe2(GZ\x96q}s\xe2\x97\x84\xd4\xd3\xd6\r\xda\x0c\xd2J\x8c!Y\xf7\xde\x05\x92\xfd\x98\xa5J\'/\xdae\xbdM\xc4%!\x85p\x1e\x1d:-\x92b.\xd8\x02\x81<*\x0cA\xac6\xf3\xdd\xb6@\x92\
所以我认为那仍然是有效的邮政编码。
预先感谢您的任何想法
答案 0 :(得分:0)
我尝试使用pyspark.SparkContext.addFile(path)
和pyspark.SparkFiles.get(filename)
来获取一个zip文件,然后它可以正常工作。
这是我的示例代码。
path = 'dbfs:/mnt/<your mount name>/<your zip file name>.zip'
spark.sparkContext.addFile(path)
from pyspark import SparkFiles
import zipfile
with zipfile.ZipFile(SparkFiles.get("<your zip file name>.zip"), 'r') as zf:
print ("zipfile is OK")
print(zf.namelist())
希望有帮助。