Чтение, обработка и запись файлов (в частности, zip-файла) в озеро данных Azure в блоках данных памяти без использования кластерного дискового хранилища - PullRequest
0 голосов
/ 05 мая 2020
def zip_extract(x):
    print('hello')
    fn=x[0]
    in_memory_data = io.BytesIO(x[1])
    file_obj = zipfile.ZipFile(in_memory_data, "r")
    files = [i for i in file_obj.namelist()]
    items_to_remove=['user.txt']
    zin = zipfile.ZipFile (in_memory_data, 'r')
    bytIO = io.BytesIO()
    zout = zipfile.ZipFile (bytIO, 'w')
    for member in zin.namelist(): 
      print(member)
      match=0
      for item in items_to_remove:
        if(item in member):
          match=1
          break
      if(match==0):
        buffer = zin.read(member)
        zout.writestr(member, buffer)

    return dict(fn=bytIO)


zips = sc.binaryFiles('/mnt/.../file.zip')
files_data = zips.map(zip_extract).collect()

files_data - это список dict, каждый dict имеет один элемент с именем файла в качестве ключа и данными в качестве значения, я хочу записать данные как файл непосредственно в озеро данных

...