2013-04-30 40 views
33

Đối với dự án Big Data, tôi dự định sử dụng spark, trong đó có một số tính năng tuyệt vời như tính toán trong bộ nhớ cho khối lượng công việc lặp lại. Nó có thể chạy trên các tập tin địa phương hoặc trên đầu trang của HDFS.hỗ trợ gzip trong Spark

Tuy nhiên, trong tài liệu chính thức, tôi không thể tìm thấy bất kỳ gợi ý nào về cách xử lý các tệp đã nén. Trong thực tế, nó có thể khá hiệu quả để xử lý các tệp .gz thay vì các tệp đã giải nén.

Có cách nào để thực hiện thủ công việc đọc tệp đã giải nén hoặc giải nén đã được tự động thực hiện khi đọc tệp .gz không?

Trả lời

66

Từ hướng dẫn Spark Scala trình của section on "Hadoop Datasets":

Spark có thể tạo bộ dữ liệu phân phối từ bất kỳ tập tin được lưu trữ trong hệ thống Hadoop phân phối tập tin (HDFS) hoặc hệ thống lưu trữ khác được hỗ trợ bởi Hadoop (bao gồm cả hệ thống tập tin địa phương, Amazon S3, Hypertable, HBase, v.v.) Spark hỗ trợ các tệp văn bản, SequenceFiles và bất kỳ Hadoop InputFormat nào khác.

Hỗ trợ tệp nhập gzip phải hoạt động tương tự như trong Hadoop. Ví dụ: sc.textFile("myFile.gz") sẽ tự động giải nén và đọc tệp nén gzip (textFile() thực sự là implemented sử dụng Hadoop's TextInputFormat, hỗ trợ các tệp nén gzip).

Như đã đề cập bởi @ nick-Chammas trong các ý kiến:

lưu ý rằng nếu bạn gọi sc.textFile() trên một tập tin đã giải nén, Spark sẽ cung cấp cho bạn một RDD với chỉ 1 phân vùng (tính đến 0.9.0) . Điều này là do tệp được nén là not splittable. Nếu bạn không phân vùng lại RDD bằng cách nào đó, bất kỳ hoạt động trên RDD sẽ được giới hạn trong một lõi đơn

+45

tôi xin lưu ý rằng nếu bạn gọi 'sc.textFile() 'trên một tập tin đã giải nén, Spark sẽ cung cấp cho bạn một RDD chỉ với 1 phân vùng (như 0.9.0). Điều này là do các tệp được nén là [không thể chia nhỏ] (http://mail-archives.apache.org/mod_mbox/spark-user/201310.mbox/%[email protected] .com% 3E). Nếu bạn không phân vùng lại RDD bằng cách nào đó, bất kỳ hoạt động nào trên RDD đó sẽ bị giới hạn ở một lõi đơn. –

+3

Khi tôi thử 'logs = sc.textFile (" logs/*. Bz2 ")', tôi gặp lỗi trên 'logs.count()' sau đó. Bất kỳ ý tưởng tại sao? – zbinsd

+0

@zbinsd bạn đã tìm ra nó ở cuối? Tôi nhận được lỗi sau khi tải tệp tar.gz: JsonParseException: Ký tự không hợp lệ ((CTRL-CHAR, mã 0)): chỉ khoảng trắng thông thường (\ r, \ n, \ t) được cho phép giữa các mã thông báo – Leon