Tôi có đoạn mã sau vào Spark:Spark: kết thành một khối rất chậm ngay cả những dữ liệu đầu ra là rất nhỏ
myData.filter(t => t.getMyEnum() == null)
.map(t => t.toString)
.saveAsTextFile("myOutput")
Có 2000+ tập tin trong thư mục myOutput, nhưng chỉ có một vài t.getMyEnum() == null, vì vậy chỉ có rất ít bản ghi đầu ra. Vì tôi không muốn tìm kiếm chỉ là một vài kết quả đầu ra trong 2000+ file đầu ra, tôi đã cố gắng để kết hợp đầu ra sử dụng kết thành một khối như dưới đây:
myData.filter(t => t.getMyEnum() == null)
.map(t => t.toString)
.coalesce(1, false)
.saveAsTextFile("myOutput")
Sau đó, công việc trở nên rất chậm! Tôi tự hỏi tại sao nó quá chậm? Chỉ có một vài bản ghi đầu ra phân tán trong 2000 phân vùng? Có cách nào tốt hơn để giải quyết vấn đề này không?
Là 'coalesce (1, shuffle = true)' tương đương với 'repartition (1)'? – asmaier
Có, nó là như nhau: nếu bạn nhìn vào mã nguồn, phân vùng (1) có shuffle được đặt thành true theo mặc định. – sversch