Ana*_*eep 4 scala apache-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))
Run Code Online (Sandbox Code Playgroud)
根据我的理解,flatmap将Rdd输入到String/Int Rdd的集合中.我想在这种情况下两者都应该没有任何错误.请让我知道我在哪里犯了错误.
谢谢
您需要查看签名如何定义这些方法:
def map[U: ClassTag](f: T => U): RDD[U]
Run Code Online (Sandbox Code Playgroud)
map
从类型T
到类型获取函数U
并返回一个RDD[U]
.
另一方面,flatMap
:
def flatMap[U: ClassTag](f: T => TraversableOnce[U]): RDD[U]
Run Code Online (Sandbox Code Playgroud)
期望一个函数类型T
为a TraversableOnce[U]
,这是一个特性Tuple2
没有实现,并返回一个RDD[U]
.通常,flatMap
当您想要展平集合集合时使用,即如果您有一个RDD[List[List[Int]]
并且您想要生成一个集合,则RDD[List[Int]]
可以使用它进行平面映射identity
.
归档时间: |
|
查看次数: |
7563 次 |
最近记录: |