2016-08-04 3 views
2

У меня есть тысяча двоичных файлов в формате сжатия, и каждый файл необходимо декодировать отдельно за один проход. Максимальный размер файла - 500 МБ. В настоящее время я могу делать декодирование файлов один за другим с помощью python (с пакетом struct). Но так как количество файлов огромно по количеству и размеру, поэтому его невозможно декодировать файл последовательно.Декодировать набор двоичных файлов с помощью Spark

Я подумываю обрабатывать эти данные в искры, но у меня нет большого опыта в искре. Можете ли вы предложить, если эта задача может быть выполнена в искры. Спасибо заранее.

ответ

3

sc.textFiles не будет работать здесь, так как у вас есть двоичные файлы. Вы должны использовать sc.binaryFiles

Вот пример в python, я уверен, что scala и java имеют одинаковый API-интерфейс binaryFiles.

from pyspark import SparkContext 
sc= SparkContext() 

raw_binary = sc.binaryFiles("/path/to/my/files/directory") 

import zlib 
def decompress(val): 
    try: 
     s = zlib.decompress(val, 16 + zlib.MAX_WBITS) 
    except: 
     return val 
    return s 
raw_binary.mapValues(decompress).take(1) 

Вы можете использовать Zlib распаковывать

+0

Спасибо. +1 для этого. Его работа отлично, если данные находятся в несжатом двоичном формате. Но не работает со сжатыми двоичными файлами (* .dat.gz). Не могли бы вы посоветовать мне, как работать с тем же. – rks

+0

Я внес изменения, чтобы иметь возможность распаковывать, надеюсь, что это поможет. Обязательно повысьте и сделайте правильный ответ, если вам это понравится. – venuktan

Смежные вопросы