tôi đã viết chương trình này trong spark shellTại sao foreach không mang lại bất cứ điều gì cho chương trình điều khiển?
val array = sc.parallelize(List(1, 2, 3, 4))
array.foreach(x => println(x))
này in một số báo cáo debug nhưng không phải là con số thực tế.
Đoạn code dưới đây hoạt động tốt
for(num <- array.take(4)) {
println(num)
}
Tôi hiểu rằng take
là một hành động và do đó sẽ gây ra tia lửa để kích hoạt các tính lười biếng.
Nhưng foreach nên đã làm việc cùng một cách ... tại sao foreach
không mang lại bất cứ điều gì trở lại từ tia lửa và bắt đầu thực hiện việc xử lý thực tế (thoát khỏi chế độ lười biếng)
Làm thế nào tôi có thể làm cho foreach trên RDD công việc?
Foreach là tuyệt vời khi bạn cần phải cập nhật một bộ tích lũy bên trong một hàm và muốn đảm bảo hành động rằng nó sẽ chỉ cập nhật một lần. Theo như tôi có thể nói đó là hành động duy nhất trong Spark cho phép tôi chạy sạch một hàm trên RDD. ([Mỗi tài liệu Spark] (http://spark.apache.org/docs/latest/programming-guide.html#accumulators-a-nameaccumlinka) Đối với các bản cập nhật tích lũy chỉ được thực hiện bên trong các hành động, Spark đảm bảo rằng mọi cập nhật của công việc đối với ắc quy sẽ chỉ được áp dụng một lần, nghĩa là các tác vụ khởi động lại sẽ không cập nhật giá trị) – JimLohse