我是靠谱客的博主 舒适八宝粥,最近开发中收集的这篇文章主要介绍【spark】常用转换操作:keys 、values、mapValues、map、flatMap、flatMapValues,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.keys

功能:

  返回所有键值对的key

示例

1

2

3

4

val list = List("hadoop","spark","hive","spark")

val rdd = sc.parallelize(list)

val pairRdd = rdd.map(x => (x,1))

pairRdd.keys.collect.foreach(println)

结果

1

2

3

4

5

6

7

hadoop

spark

hive

spark

list: List[String] = List(hadoop, spark, hive, spark)

rdd: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[142] at parallelize at command-3434610298353610:2

pairRdd: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[143] at map at command-3434610298353610:3

2.values

功能:

  返回所有键值对的value

示例

1

2

3

4

val list = List("hadoop","spark","hive","spark")

val rdd = sc.parallelize(list)

val pairRdd = rdd.map(x => (x,1))

pairRdd.values.collect.foreach(println)

结果

1

2

3

4

5

6

7

1

1

1

1

list: List[String] = List(hadoop, spark, hive, spark)

rdd: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[145] at parallelize at command-3434610298353610:2

pairRdd: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[146] at map at command-3434610298353610:3

3.mapValues(func)

功能:

  对键值对每个value都应用一个函数,但是,key不会发生变化。

示例 

1

2

3

4

val list = List("hadoop","spark","hive","spark")

val rdd = sc.parallelize(list)

val pairRdd = rdd.map(x => (x,1))

pairRdd.mapValues(_+1).collect.foreach(println)//对每个value进行+1

结果

1

2

3

4

(hadoop,2)

(spark,2)

(hive,2)

(spark,2)

4.map(func)

功能:

  将函数作用到数据集的每一个元素上,生成一个新的分布式的数据集(RDD)返回

示例

        >>> rdd = sc.parallelize(["b", "a", "c"])
        >>> sorted(rdd.map(lambda x: (x, 1)).collect())
        [('a', 1), ('b', 1), ('c', 1)]
        """
        def func(_, iterator):
            return map(fail_on_stopiteration(f), iterator)
        return self.mapPartitionsWithIndex(func, preservesPartitioning)

 

5.flatMap

flatMap会先执行map的操作,再将所有对象合并为一个对象,返回值是一个Sequence。

def flatMap(self, f, preservesPartitioning=False):
        """
        >>> rdd = sc.parallelize([2, 3, 4])
        >>> sorted(rdd.flatMap(lambda x: range(1, x)).collect())
        [1, 1, 1, 2, 2, 3]
        >>> sorted(rdd.flatMap(lambda x: [(x, x), (x, x)]).collect())
        [(2, 2), (2, 2), (3, 3), (3, 3), (4, 4), (4, 4)]
        """
        def func(s, iterator):
            return chain.from_iterable(map(fail_on_stopiteration(f), iterator))
        return self.mapPartitionsWithIndex(func, preservesPartitioning)

可以看出,map对 "hello world", "hello fly"这两个对象分别映射为['hello', 'world'], ['hello', 'fly'],而flatMap在map的基础上做了一个合并操作,将这两个对象合并为一个['hello', 'world', 'hello', 'fly'],这就造就了flatMap在词频统计方面的优势。

6.flatMapValues

与mapValues类似,但可以将一个value展开成多个value。

 

 

 

 

 

 

 

 

 

 

 

最后

以上就是舒适八宝粥为你收集整理的【spark】常用转换操作:keys 、values、mapValues、map、flatMap、flatMapValues的全部内容,希望文章能够帮你解决【spark】常用转换操作:keys 、values、mapValues、map、flatMap、flatMapValues所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部