• Spark Core核心----RDD常用算子编程


    1、RDD常用操作2、Transformations算子3、Actions算子4、SparkRDD案例实战

    1、Transformations算子(lazy)

    含义:create a new dataset from an existing on 从已经存在的创建一个新的数据集

    RDDA---------transformation----------->RDDB

    • map:map(func)

    将func函数作用到数据集的每一个元素上,生成一个新的分布式的

    数据集返回

    例子:1

    data = [1, 2, 3, 4, 5]
    rdd1 = sc.parallelize(data)
    rdd2 = rdd1.map(lambda x:x*2)
    print(rdd2.collect())

    例子2:

    a = sc.parallelize(["dog","tiger","lion","cat","panther","eagle"]).map(lambda x:(x,1))
    print(a.collect())

    结果:

    • filter(过滤)filter(func)

    选出所有func返回值为true的元素,生成一个新的分布式数据集返回

    例子:

    RDDA = sc.parallelize([1, 2, 3, 4, 5]).map(lambda x:x*2).filter(lambda x:x>5)
    print(RDDA.collect())

    结果:

    • flatMap()    flatMap(func)

    输入的item能够被map到0或者多个items输出,返回值是一个Sequence          (拆分)

    data = ["hello spark","hello word","hello word"]
    RDD = sc.parallelize(data)
    print(RDD.flatMap(lambda line:line.split(" ")).collect())

    结果

    • groupByKey()(把相同的key的数据分发到一起)

    data = ["hello spark", "hello word", "hello word"]
    RDD = sc.parallelize(data)
    RDD2 = RDD.flatMap(lambda line:line.split(" ")).map(lambda x:(x,1))
    RDD3 = RDD2.groupByKey()
    print(RDD3.map(lambda x:{x[0]:list(x[1])}).collect())

    结果

    • reduceByKey(把相同的key的数据分发到一起,并进行相应的计算)

    data = ["hello spark", "hello word", "hello word"]
    RDD = sc.parallelize(data)
    RDD2 = RDD.flatMap(lambda line: line.split(" ")).map(lambda x: (x, 1))
    RDD3 = RDD2.reduceByKey(lambda a,b:a+b)
    print(RDD3.collect())

    结果

    • sortByKey()默认按照key值升序排列

    data = ["hello spark", "hello word", "hello word"]
    RDD = sc.parallelize(data)
    RDD2 = RDD.flatMap(lambda line: line.split(" ")).map(lambda x: (x, 1))
    RDD3 = RDD2.reduceByKey(lambda a, b: a + b)
    sortRDD = RDD3.sortByKey()
    sortRDD.collect()

    结果

    加False参数降序排列

    实现按照数字排序

    使用map交换一下顺序

    • union连接(把RDD连接起来)

    a = sc.parallelize([1, 2, 3])
    b = sc.parallelize([4, 5, 6])
    a.union(b).collect()

    结果

    • distinct(去除重复)

    a = sc.parallelize([1, 2, 3])
    b = sc.parallelize([4, 3, 3])
    a.union(b).distinct().collect()

    结果

    • join(内连接,左外连接,右外连接)

    a = sc.parallelize([("A","a1"),("C","c1"),("D","d1"),("F","f1"),("F","f2")])
    b = sc.parallelize([("A","a2"),("C","c2"),("C","c3"),("E","e1")]) 
    a.join(b).collect()               # 内连接
    a.rightOuterJoin(b).collect()     # 右外连接
    a.leftOuterJoin(b).collect()      # 左外连接
    a.fullOuterJoin(b).collect()      # 全连接

    内连接:

    得到两者key值相同的值的集合

    右外连接:以右表key为基准进行连接

    左外连接:以左表以右表key为基准进行连接

    全连接:左右连接的并集所有的都出来

    2、Actions算子

    含义:return a value to the driver program after running acomputation on the dataset

    data = [1, 2, 3, 4, 5, 6, 7, 8, 9,10]
    rdd = sc.parallelize(data)
    rdd.count()    # 数量
    rdd.take(3)    # 前几个
    rdd.max()      # 最大值
    rdd.min()      # 最小值
    rdd.sum()      # 求和
    rdd.reduce(lambda x,y:x+y)    # 求和
    rdd.foreach(lambda x:print(x))    #foreach遍历
    rdd.saveAsTextFile        #写入文件系统

    结果:

  • 相关阅读:
    linux 加载模块时出现cannot insert '*.ko': Device or resource busy错误
    Beej's Guides [Share]
    linux 符号链接与硬链接的区别
    Source Insight 3.5 一直刷新问题
    linux 内核线程与普通进程的区别
    为明远智睿 imx6q Demo v2.5 添加spi5的支持
    linux dereferencing pointer to incomplete type错误
    imx6 ECSPI Config Register 中SS_CTL的使用
    linux Copy-on-Write
    C语言根据国家英文首字母进行排序
  • 原文地址:https://www.cnblogs.com/zhangguangxiang/p/14232646.html
Copyright © 2020-2023  润新知