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?

两者都map返回flatMapRDD,不同之处在于你必须传递一个返回TraversableOnceflatMap. 然后它将“扁平化”数据结构,因此得名。flatMap就是这样定义的。您可以传递x => Array(x.contains("a"))flatMap,但在这种情况下使用会更简单map

于 2016-05-29T05:51:23.830 回答
1

map 对列表中的每个元素计算一个函数,返回一个具有相同数量元素的列表。而 flatMap 为集合的元素调用函数 f 来生成一个新集合。flatMap 只是 map 与 flatten 的结合。

flatMap[B](f: A => Container[B]): Container[B]
于 2016-05-29T08:32:37.430 回答