2015-09-15 19 views
5

Tôi đã không thể tìm thấy nhiều thông tin về chủ đề này nhưng cho phép nói rằng chúng tôi sử dụng một khung dữ liệu để đọc trong một tập tin lát gỗ là 10 Blocks spark sẽ tự nhiên tạo 10 phân vùng. Nhưng khi dataframe đọc trong tập tin để xử lý nó, nó sẽ không xử lý một tỷ lệ lớn dữ liệu cho phân vùng bởi vì nếu nó được xử lý tập tin không nén kích thước khối sẽ có ý nghĩa lớn hơn nhiều các phân vùng sẽ lớn hơn là tốt.Spark DataFrames với Parquet và Partitioning

Vì vậy, hãy để tôi làm rõ, tính năng nén bằng gỗ (những con số này không hoàn toàn chính xác). 1GB Par = 5 Blocks = 5 Phân vùng có thể được giải nén thành 5 GB, tạo thành 25 khối/25 phân vùng. Nhưng trừ khi bạn phân vùng lại tập tin par 1GB, bạn sẽ bị kẹt với chỉ 5 phân vùng khi tối ưu nó sẽ là 25 phân vùng? Hoặc là logic của tôi sai.

Sẽ có ý nghĩa khi phân vùng lại để tăng tốc độ? Hay tôi đang nghĩ về điều này sai. Bất cứ ai có thể làm sáng tỏ về điều này?

Giả định:

  • 1 khối = 1 Partition Đối Spark
  • 1 lõi hoạt động trên 1 phân vùng
+0

"đang xử lý nhiều thông tin hơn" so với thông tin gì? –

+1

Điều tôi muốn nói là chúng ta đọc một tập tin bằng gỗ với 10 khối nhưng khi nó chưa được nén thì bạn vẫn đang sử dụng 10 phân vùng trong Spark. Bạn có nên phân vùng lại vì tệp không nén tự động lớn hơn không? – theMadKing

+0

đã thêm các giải thích bổ sung – theMadKing

Trả lời

4

Spark DataFrame không tải file gỗ trong bộ nhớ. Nó sử dụng API Hadoop/HDFS để đọc nó trong mỗi thao tác. Vì vậy, số lượng phân vùng tối ưu phụ thuộc vào kích thước khối HDFS (khác với kích thước khối Parquet!).

Spark 1.5 DataFrame tập tin phân vùng sàn gỗ như sau:

  • 1 phân vùng cho mỗi khối HDFS
  • Nếu kích thước HDFS khối nhỏ hơn cấu hình kích thước Spark gỗ khối một phân vùng sẽ được tạo ra cho nhiều khối HDFS như vậy vì tổng kích thước phân vùng không nhỏ hơn kích thước khối gỗ
0

Tôi đã thấy câu trả lời khác nhưng tôi nghĩ tôi có thể làm rõ thêm về điều này. Nếu bạn đang đọc Parquet từ hệ thống tập tin posix thì bạn có thể tăng số lượng các bài đọc phân vùng bằng cách chỉ có nhiều công nhân hơn trong Spark.

Nhưng để kiểm soát số dư dữ liệu đi vào công nhân, bạn có thể sử dụng cấu trúc dữ liệu phân cấp của các tệp Parquet và sau đó trong các công nhân bạn có thể trỏ đến các phân vùng hoặc phần khác nhau của tệp Parquet. Điều này sẽ cho phép bạn kiểm soát số lượng dữ liệu sẽ đi đến từng công nhân theo miền của tập dữ liệu của bạn (nếu bằng cách cân bằng dữ liệu trong công nhân bạn có nghĩa là số lượng dữ liệu trên mỗi công nhân không hiệu quả).

Các vấn đề liên quan