Map和FlatMap操作

1. 目的

我们将介绍什么是Map操作,什么是FlatMap操作,以及它们之间的区别。Map操作作用于RDD的每个元素,并将结果作为新的RDD返回。在Map中,我们可以定义业务逻辑。虽然FlatMap与Map类似,但FlatMap允许从map函数返回0个、1个或多个元素。

2. Map与FlatMap操作之间的区别

2.1 Map

Map是Spark中的一个转换操作,它作用于RDD的每个元素,并将结果作为新的RDD返回。 在Map中,开发人员可以定义他自己的业务逻辑,相同的逻辑将应用于RDD的所有元素。Map操作根据自定义代码(由开发人员指定)将一个元素作为输入处理,并一次返回一个元素。Map将长度为N的RDD转换为长度为N的另一个RDD,输入和输出RDD通常具有相同数量的元素。

1)创建RDD

val data = spark.read.textFile("INPUT-PATH").rdd

2)Map – 1

val newData = data.map (line => line.toUpperCase() )

Map操作将RDD中的每个元素(每行字符串)转换为大写。

3)Map – 2

val tag = data.map {line => {
    val xml = XML.loadString(line)
    xml.attribute("Tags").get.toString()
}

Map操作将解析XML并从XML数据中收集Tags属性。总的来说,map操作是将XML转换为结构化格式。

2.2 FlatMap

FlatMap是Spark中的一个转换操作,它作用于RDD的每个元素,并将结果作为新的RDD返回。它与Map类似,但FlatMap允许从map函数返回0个、1个或多个元素。在FlatMap操作中,开发人员可以定义他自己的业务逻辑,同样的逻辑将应用于RDD的所有元素。FlatMap操作根据自定义代码(由开发人员指定)将一个元素作为输入处理,并一次返回0个、1个或更多元素。FlatMap将长度为N的RDD转换为长度为M的新RDD。

val result = data.flatMap (line => line.split(" ") )

FlatMap将一行按照空格分隔为多个单词,然后展开,最终新创建的RDD的单个元素是一个单词。

3. 结论

从map()与flatMap()之间的比较来看,很明显map()表达了一对一的转换,它将集合的每个元素转换为结果集合的一个元素。flatMap()表示一对多的转换,它将每个元素转换为0个或更多元素。

Map和FlatMap操作
滚动到顶部