flatMap不支持布尔值吗?

时间:2016-05-29 05:42:38

标签: scala apache-spark flatmap

我在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"))

2 个答案:

答案 0 :(得分:3)

to.period期望函数作为返回flatMap的参数,即列表或其他内容。 TraversableOnce返回一个普通的布尔值 - 也许您打算使用x.contains("a")代替map

flatMapmap都返回RDD,不同之处在于您必须传递一个返回flatMapTraversableOnce的函数。然后它将“展平”数据结构,因此命名。 flatMap就是这样定义的。您可以flatMap传递给x => Array(x.contains("a")),但在这种情况下使用flatMap会更简单。

答案 1 :(得分:1)

map计算列表中每个元素的函数,返回具有相同元素数的列表。而flatMap为产生新集合的集合的元素调用函数f。 flatMap只是地图与展平的组合。

flatMap[B](f: A => Container[B]): Container[B]