我在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"))
答案 0 :(得分:3)
to.period
期望函数作为返回flatMap
的参数,即列表或其他内容。 TraversableOnce
返回一个普通的布尔值 - 也许您打算使用x.contains("a")
代替map
?
flatMap
和map
都返回RDD,不同之处在于您必须传递一个返回flatMap
到TraversableOnce
的函数。然后它将“展平”数据结构,因此命名。 flatMap
就是这样定义的。您可以将flatMap
传递给x => Array(x.contains("a"))
,但在这种情况下使用flatMap
会更简单。
答案 1 :(得分:1)
map计算列表中每个元素的函数,返回具有相同元素数的列表。而flatMap为产生新集合的集合的元素调用函数f。 flatMap只是地图与展平的组合。
flatMap[B](f: A => Container[B]): Container[B]