Databricks中中央目录的错误魔术数字

时间:2019-07-16 16:14:20

标签: python azure zip databricks

问题是我的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\ 所以我认为那仍然是有效的邮政编码。

预先感谢您的任何想法

1 个答案:

答案 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())

希望有帮助。