Tôi đã có DataFrame mà tôi đang hoạt động và tôi muốn nhóm theo một nhóm cột và hoạt động theo nhóm trên các cột còn lại. Trong thường xuyên RDD
-Đất Tôi nghĩ rằng nó sẽ giống như thế này:Spark DataFrame: hoạt động theo nhóm
rdd.map(tup => ((tup._1, tup._2, tup._3), tup)).
groupByKey().
forEachPartition(iter => doSomeJob(iter))
trong DataFrame
-Đất Tôi muốn bắt đầu như thế này:
df.groupBy("col1", "col2", "col3") // Reference by name
nhưng sau đó tôi không chắc chắn làm thế nào để hoạt động trên các nhóm nếu hoạt động của tôi phức tạp hơn so với giá trị trung bình/phút/tối đa/số được cung cấp bởi GroupedData. Ví dụ, tôi muốn xây dựng một tài liệu MongoDB đơn trên mỗi nhóm ("col1", "col2", "col3")
(bằng cách lặp qua các số s liên quan trong nhóm), chia tỷ lệ xuống phân vùng N
, sau đó chèn tài liệu vào cơ sở dữ liệu MongoDB. Giới hạn N
là số lượng kết nối đồng thời tối đa mà tôi muốn.
Bất cứ lời khuyên?
Cách tốt nhất: Viết UDAF (chưa được hỗ trợ, xem SPARK-4233 và SPARK-3947). Cho đến lúc đó, sử dụng DF.RDD để truy cập các phương thức RDD như aggregateByKey để đạt được những gì bạn muốn xây dựng –