2016-03-13 17 views
7

Tôi hiểu rằng partitionBy phân vùng chức năng dữ liệu của tôi. Nếu tôi sử dụng rdd.partitionBy(100), nó sẽ phân vùng dữ liệu của tôi bằng cách nhập vào 100 phần. tức là dữ liệu được liên kết với các khóa tương tự sẽ được nhóm lại với nhaupyspark partioning data bằng cách sử dụng partitionby

  1. Hiểu biết của tôi có chính xác không?
  2. Bạn nên có số lượng phân vùng bằng số lượng lõi khả dụng? Điều đó có làm cho việc xử lý hiệu quả hơn không?
  3. nếu dữ liệu của tôi không ở định dạng giá trị, khóa. Tôi vẫn có thể sử dụng chức năng này?
  4. cho phép nói dữ liệu của tôi là serial_number_of_student, student_name. Trong trường hợp này tôi có thể phân vùng dữ liệu của mình theo student_name thay vì số không?

Trả lời

9
  1. Không chính xác. Spark, bao gồm PySpark, is by default using hash partitioning. Loại trừ các khóa giống hệt nhau không có sự giống nhau thực tế giữa các khóa được gán cho một phân vùng duy nhất.
  2. Không có câu trả lời đơn giản nào ở đây. Tất cả phụ thuộc vào lượng dữ liệu và tài nguyên có sẵn. Too large hoặc số phân vùng quá thấp sẽ làm giảm hiệu suất.

    Some resources yêu cầu số lượng phân vùng nên lớn gấp đôi số lượng lõi khả dụng. Mặt khác, một phân vùng đơn thường không được chứa nhiều hơn 128MB và một khối trộn đơn không thể lớn hơn 2GB (Xem SPARK-6235).

    Cuối cùng, bạn phải sửa các sai số dữ liệu tiềm năng. Nếu một số khóa được đại diện quá mức trong tập dữ liệu của bạn, nó có thể dẫn đến việc sử dụng tài nguyên dưới mức tối ưu và thất bại tiềm ẩn.

  3. Không, hoặc ít nhất không trực tiếp. Bạn có thể sử dụng phương thức keyBy để chuyển đổi RDD thành định dạng bắt buộc. Hơn nữa, bất kỳ đối tượng Python nào cũng có thể được coi là cặp khóa-giá trị miễn là nó thực hiện các phương thức bắt buộc để nó hoạt động giống như Iterable có độ dài bằng hai. Xem How to determine if object is a valid key-value pair in PySpark

  4. Tùy thuộc vào loại. Miễn là khóa là có thể băm * thì có. Thông thường nó có nghĩa là nó phải là cấu trúc bất biến và tất cả các giá trị nó chứa phải không thay đổi. Ví dụ: a list is not a valid key nhưng tuple của số nguyên là.

Để báo Python glossary:

Một đối tượng là hashable nếu nó có một giá trị băm mà không bao giờ thay đổi trong suốt cuộc đời của nó (nó cần một phương pháp __hash__()), và có thể được so sánh với các đối tượng khác (cần có phương thức __eq__()). Các đối tượng có thể băm được so sánh bằng nhau phải có cùng giá trị băm.

-1

Gần đây tôi đã sử dụng phân vùngby. Những gì tôi đã làm là cơ cấu lại dữ liệu của tôi để tất cả những gì tôi muốn đặt trong cùng một phân vùng có cùng một khóa, do đó là một giá trị từ dữ liệu. dữ liệu của tôi là một danh sách các từ điển, mà tôi chuyển đổi thành tupples với khóa từ điển.Trong trường hợp partitionby không giữ cùng một khóa trong cùng một phân vùng. Nhưng rồi tôi nhận ra chìa khóa là dây. Tôi bỏ chúng vào int.Nhưng vấn đề vẫn tồn tại. Các con số rất lớn. Sau đó tôi ánh xạ những con số này thành các giá trị số nhỏ và nó hoạt động. Vì vậy, tôi lấy đi là các phím cần phải là số nguyên nhỏ.

+0

Bạn nên đánh vần kiểm tra câu trả lời này, nó chứa rất nhiều lỗi chính tả. –

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