1.5.1.4 常用算子之map/flatmap/mapPart

2020-03-29  本文已影响0人  寒暄_HX

总目录:https://www.jianshu.com/p/e406a9bc93a9

Hadoop - 子目录:https://www.jianshu.com/p/9428e443b7fd

输入分区与输出分区一对一型

map
pyspark实现
>>> rdd = sc.parallelize([1,2,3,4])  
>>> rdd.getNumPartitions()  //查看分区数
1
>>> rdd1 = rdd.map(lambda i : range(1,i)) //将rdd内每个元素依次放入map中的函数内获取返回值。
>>> rdd1.collect()
[range(1, 1), range(1, 2), range(1, 3), range(1, 4)]
scala实现
scala> val data = sc.parallelize(1 to 10)
data: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:24

scala> val result = data.map(it => it + 1)
result: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[1] at map at <console>:25

scala> result.collect
res0: Array[Int] = Array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)  
flatmap

他和map的区别是会打通不同的分区,一般用于读取文件。

pyspark实现
>>> rdd = sc.parallelize([1,2,3,4])  
>>> rdd2 = rdd.flatMap(lambda i:range(1,i))
>>> rdd2.collect()
[1, 1, 2, 1, 2, 3]
scala实现
scala> val result2 = data.filter(it => it%2 == 0 )
result2: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[3] at filter at <console>:25

scala> result2.collect
res1: Array[Int] = Array(2, 4, 6, 8, 10)
pyspark实现
>>> rdd.glom().collect()
[[1, 2, 3, 4]]
// 如果是两个分区的RDD,这里就是一个二维列表。
上一篇 下一篇

猜你喜欢

热点阅读