2013-04-30 3 views
33

Для проекта Big Data я планирую использовать spark, который имеет некоторые приятные функции, такие как вычисления в памяти для повторяющихся рабочих нагрузок. Он может работать на локальных файлах или поверх HDFS.Поддержка gzip в Spark

Однако в официальной документации я не могу найти подсказок о том, как обрабатывать gzip-файлы. На практике это может быть довольно эффективно обрабатывать файлы .gz вместо распакованных файлов.

Есть ли способ вручную выполнить чтение gzipped-файлов или разархивировать уже автоматически при чтении .gz-файла?

ответ

66

От Спарк программирования Scala гида section on "Hadoop Datasets":

Свечи могут создавать распределенные массивы данных из любого файла, сохраненного в распределенной файловой системе Hadoop (HDFS) или других систем хранения данных, поддерживаемых Hadoop (в том числе в локальной файловой системе, Amazon S3, Hypertable, HBase и т. Д.). Spark поддерживает текстовые файлы, SequenceFiles и любые другие Hadoop InputFormat.

Поддержка входных файлов gzip должна работать так же, как в Hadoop. Например, sc.textFile("myFile.gz") должен автоматически распаковывать и читать gzip-сжатые файлы (textFile() на самом деле implemented с использованием Hadoop's TextInputFormat, который поддерживает файлы, сжатые gzip).

Как упомянуто @ нарицательные Хаммасы в комментариях:

обратите внимание, что если вы звоните sc.textFile() на сжатые файлы, Спарк даст вам RDD только один раздел (по 0.9.0) , Это связано с тем, что gzipped файлы: not splittable. Если вы не переразметьте RDD каким-то образом, любые операции по этому РДУ будут ограничены одним ядром

+45

Я хотел бы отметить, что, если вы звоните 'sc.textFile()' на сжатыми файлами, Спарк даст у вас есть RDD с 1 разделом (с 0.9.0). Это связано с тем, что файлы gzipped [не разделяются] (http://mail-archives.apache.org/mod_mbox/spark-user/201310.mbox/%[email protected] .com% 3E). Если вы каким-либо образом не переделаете RDD, любые операции с этим RDD будут ограничены одним ядром. –

+3

Когда я пытаюсь 'logs = sc.textFile (" logs/*. Bz2 ")', я получаю сообщение об ошибке в следующем 'logs.count()'. Любые идеи почему? – zbinsd

+0

@zbinsd вы поняли это в конце? Я получаю следующую ошибку при загрузке файлов tar.gz: JsonParseException: Незаконный символ ((CTRL-CHAR, код 0)): разрешено только обычное пустое пространство (\ r, \ n, \ t) между токенами – Leon

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