クラスターで実行されている非常に大きな RDD を取得して、.csv に書き込もうとしています。.collect() が壊れるほど大きいので、代わりに各ノードで RDD を分割して保存し、順序は問題にならないので、どうにかしてそれらをまとめたいと思います。私の考えでは、CSV プリンター関数で foreach を使用して、各パーツがその値を書き込むようにし、おそらく FTP を使用してパーツを手動で収集できるようにします。
私はある程度の経験を持つ Spark ユーザーですが、これまで RDD の foreach メソッドを有用なものにすることはできませんでした。ドキュメントに記載されている例を実行しようとすると、
>>> def f(x): print x
>>> sc.parallelize([1, 2, 3, 4, 5]).foreach(f)
コンソールには何も返されません。これは、コンソールが配置されている名前ノードではなく、個別のノードで「印刷」が実行されているためだと思います。ただし、その場合、 foreach 関数にはあまり意味がありません。
最初に collect() 関数を呼び出さずに、for each の結果を名前ノードに戻すにはどうすればよいですか?
注意。私は saveAsTextFile() RDD 関数を使用することにもオープンですが、これも機能させることができませんでした! テキストファイルではなくフォルダを作成しているように見えますが、これはおそらく、それらが中央ではなく各ノードにも存在するためでしょうか?