scala - 错误 : type mismatch flatMap

标签 scala apache-spark

我是 Spark 编程和 Scala 的新手,我无法理解 map 和 flatMap 之间的区别。
我尝试了下面的代码,因为我希望两者都能正常工作,但出现错误。

scala> val b = List("1","2", "4", "5")
b: List[String] = List(1, 2, 4, 5)

scala> b.map(x => (x,1))
res2: List[(String, Int)] = List((1,1), (2,1), (4,1), (5,1))

scala> b.flatMap(x => (x,1))
<console>:28: error: type mismatch;
 found   : (String, Int)
 required: scala.collection.GenTraversableOnce[?]
              b.flatMap(x => (x,1))

根据我的理解,平面图使 Rdd 成为 String/Int Rdd 的集合。
我在想,在这种情况下,两者都应该没有任何错误。请让我知道我在哪里犯了错误。

谢谢

最佳答案

您需要查看签名如何定义这些方法:

def map[U: ClassTag](f: T => U): RDD[U]
map 从类型 T 获取一个函数到类型 U 并返回一个 RDD[U]

另一方面, flatMap :
def flatMap[U: ClassTag](f: T => TraversableOnce[U]): RDD[U]

期望将 T 类型转换为 TraversableOnce[U] 的函数,这是 Tuple2 未实现的特征,并返回 RDD[U] 。通常,当您想要展平集合集合时,您可以使用 flatMap ,即,如果您有一个 RDD[List[List[Int]] 并且您想要生成一个 RDD[List[Int]],您可以使用 identity 对其进行 flatMap 。

关于scala - 错误 : type mismatch flatMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40027222/

相关文章:

scala - 如何在Sbt中配置ivy的锁策略

java - Intellij IDEA设置: cannot resolve symbol println

apache-spark - 计算 pyspark Dataframe 中的列数?

mongodb - 使用 Mongodb 的 Spark 非常慢

python - 使用 pyspark 脚本从 bigquery 加载表到 spark 集群

java - 有没有类似 LINQ for Java 的东西?

scala - 使用绑定(bind)在类类型参数中的上下文

scala - 为什么不检查对象私有(private)或对象保护定义的方差位置是安全的?

scala - 从 Spark 中的 cassandra 表中删除

apache-spark - 将分隔符作为参数传递给 Spark