2016-05-29 6 views
0

このエラーはflatMapで表示されますが、mapでは表示されません。ブール演算はflatMap変換でサポートされていませんか?booleanはflatMapでサポートされていませんか?

scala> val array = Array("age","astro") 
array: Array[String] = Array(age, astro) 

scala> val baseRdd = sc.parallelize(array) 
baseRdd: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[0] at parallelize at <console>:29 

scala> val flat2 = baseRdd2.flatMap(x => x.contains("a")) 
<console>:31: error: type mismatch; 
found : Boolean 
required: TraversableOnce[?] 
     val flat2 = baseRdd2.flatMap(x => x.contains("a")) 
+0

期待どおりの結果ですか? 2つのブール値を持つRDDはどちらも当てはまりますか? – stholzm

+0

@stholzmはい。しかし、私はマップでタトゥーをすることができます。フラットマップがブール値の結果をTraversableOnceとして返していないのは間違いです。 – BDR

+1

'map'と' flatMap'の両方がRDDを返します。違いは 'TraversableOnce'を' flatMap'に返す関数を渡さなければならない点です。それは、データ構造、したがって名前を「平坦化」します。 'flatMap'はそのように定義されています。あなたは 'x => Array(x.contains(" a "))'を 'flatMap'に渡すことができますが、' map'を使う方が簡単です。 – stholzm

答えて

3

flatMapTraversableOnceを返すパラメーターとしての機能、すなわち、リスト又は何かを期待します。 x.contains("a")は平文のブール値を返します。おそらくflatMapの代わりにmapを使用することを意図していましたか?

mapflatMapの両方が返されるRDDの違いは、TraversableOnceを返す関数をflatMapに渡す必要があることです。それは、データ構造、したがって名前を「平坦化」します。 flatMapはそのように定義されています。 となります。x => Array(x.contains("a"))からflatMapになりますが、その場合はmapを使用する方が簡単です。

1

mapは、リスト内の各要素に対する関数を評価し、同じ数の要素を持つリストを返します。 flatMapは新しいコレクションを生成するコレクションの要素の関数fを呼び出します。 flatMapは単にmapとflattenの組み合わせです。

flatMap[B](f: A => Container[B]): Container[B] 
関連する問題