来自Apache Spark的官方文档:
http://spark.apache.org/docs/latest/rdd-programming-guide.html
map(func):返回一个新的分布式数据集,它是通过函数func传递源的每个元素而形成的。
filter(func)返回一个新的数据集,选择func返回true的源元素。
用粗话来说,这是一个很大的区别吗?它真的有区别吗?
答案 0 :(得分:3)
它们用于不同的目的。如果我们查看map
的(简化)方法定义:
def map[U](func: (T) ⇒ U): Dataset[U]
期望给定类型为T
的元素,您将生成类型为U
的元素forall T
,从而生成Dataset[U]
。换句话说,是一种将T
类型的元素转换为U
类型的方法。
另一方面,filter
:
def filter(func: (T) ⇒ Boolean): Dataset[T]
期望给定一个T
类型的元素,您提供一个Boolean
值,该值表示是否应该在结果Dataset[T]
中返回该给定元素(通常称为a Predicate)。
map
的具体示例可以是:
val someDataSet: DataSet[String] = ???
val transformedDataSet: DataSet[Int] = someDataSet.map(str => str.toInt)
对于过滤器:
val someDataSet: DataSet[String] = ???
val transformedDataSet: DataSet[String] = someDataSet.filter(str => str.length > 5)
答案 1 :(得分:3)
这与最终用户在使用API的方式上存在差异。 map
用于记录输入并返回您已应用某些功能的记录。而filter
意味着将记录作为输入并返回布尔值。内部Spark将使用mapPartitions
执行。
答案 2 :(得分:0)
将整个RDD视为一个管道,在该管道中放置苹果,香蕉和桃子,然后在管道中有一个只允许通过苹果的过滤器[filter],所以只有一个苹果,然后您想要用一些糖将一个苹果变成一个糖果苹果[地图]
因此,您从苹果,香蕉和桃子开始,最终生产出糖果苹果。