2017-04-10 5 views
2

は、[*]このスニペットを見てください「フラット化」スパークしません:なぜRDDサポートが

val la = List(Array(2, 3, 5), Array(7, 11, 13)) 
la.flatten 

戻り今

res1: List[Int] = List(2, 3, 5, 7, 11, 13) 

を、私はスパークでプレーしてきたと私はつまずい問題が発生したとき

val myRdd: RDD[String] = (sc.textFile("myFilePath", 10) map (_.split("\n"))).flatten 

:スニペット:右手側の式は、[*]、私はフラット化は、トリックを行うだろうと思ったタイプRDD[Array[String]]

と同様であるとして

val myRdd: RDD[String] = sc.textFile("myFilePath", 10) map (_.split("\n")) 

はコンパイルされません。しかし、RDDはこの操作を提供していません。ここに私の質問が来る:

  1. flattenをサポートしていないRDDの背後にある(デザイン)理由は何ですか?
  2. RDDの動作/使用方法に関する重要なポイントがありませんか?

P. 私はちょうど私が

val myRdd: RDD[String] = (sc.textFile("myFilePath", 10) map (_.split("\n"))).flatMap(x => x) 

答えて

4

あなたがここにマップするのではなく、flatMap使用したいと望むものを達成するために、古い良いflatMapを使用できることを知っています。

val myRdd: RDD[String] = sc.textFile("myFilePath", 10) flatMap (_.split("\n")) 

また、ファイルは分割されていないので、ファイルごとに分割されています。

実装が難しく、同じエフェクトにを使用するだけで、Flattenが実装されませんでした。とにかくそれは冗長になるので実装する価値はありません。 https://issues.apache.org/jira/browse/SPARK-18855を参照してください。

+0

Thx!偉大な発言。問題は私の質問に答えます。それでも「スカラ」はそれを提供するのはなぜですか?私はそれが他の高次関数があるので提供されるべきだと思います。 – GA1

+0

@ GA1 Scalaのコレクションとスパークはさまざまなアイデアを持つチームによって作られていますが、RDDは通常のコレクションとは少し異なります。あなたが関連する問題を読んだら、リンクされた要求を引っ張ってみると、それは試されていることがわかりますが、開発者によれば実装するのは難しく、フラットマップは同じ機能を証明するので本当の利点はないと思います。むしろよりインパクトのあるものにリソースを費やしています。 – puhlen

関連する問題