0

私はこのエラーに直面していますがflatMap、ではありませんmap。ブール演算は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"))
4

2 に答える 2

3

flatMapを返すパラメーターとして関数TraversableOnce、つまりリストなどを期待します。x.contains("a")単純なブール値を返します - ?mapの代わりに使用するつもりだったのかもしれません。flatMap

と の両方が RDDmapflatMap返します。違いは、 に戻る関数を渡す必要があることTraversableOnceですflatMap。次に、データ構造を「フラット化」するため、名前が付けられました。flatMapそのように定義されているだけです。に渡すこともできx => Array(x.contains("a"))ますが、その場合flatMapはそのまま使用する方が簡単mapです。

于 2016-05-29T05:51:23.830 に答える