• RDD动作算子(action)


    RDD的动作算子

    • reduce(func)

      通过func函数聚集RDD中的所有元素,这个功能必须是可交换且可并联的。(符合结合律和交换律),func输入为两个元素,返回为一个元素。

        def add(x,y):
        	return x+y
      
        sc.parallelize([1, 2, 3, 4, 5]).reduce(add)
        #结果
        15
      
    • collect()

      以列表的形式返回数据集的所有元素

        sc.parallelize([1, 2, 3, 4, 5]).collect()
        #结果
        [1,2,3,4,5]
      
    • count()

      返回RDD的元素个数

        sc.parallelize([2, 3, 4]).count()
        #结果
        3
      
    • first()

      返回RDD的第一个元素(类似与take(1))

        sc.parallelize([2,3,4]).first()
        #结果
        2
      
    • take(n)

      返回一个由数据集的前n个元素组成的数组

        sc.parallelize([1,2,3,4,5]).take(3)
        #结果
        [1,2,3]
      
    • foreach(func)

      将一个函数应用于此RDD的所有元素。

        def f(x):
        	print(x)
      
        sc.parallelize([1,2,3]).foreach(f)
        #结果
        1
        2
        3
      
    • top(num)

      返回RDD内部元素的前n个最大值

        sc.parallelize([2,3,4]).top(2)
        #结果
        [4,3]
      
    • saveAsTextFile(path)

      将数据集的元素以textfile的形式保存到HDFS文件系统或者其他支持的文件系统,对于每个元素,Spark将会调用toString方法,将它装换为文件中的文本

        sc.parallelize([2,3,4]).saveAsTextFile('/home/hadoop/0444')
        
        cd 0444/
        cat part-00000
        #结果
        2
        3
        4
      
    • aggregate(zeroValue, seqOp, combOp)

    操作的初始值是zeroValue,seqOp是聚合各分区中的元素,combop是将聚合各分区中元素的结果再次进行聚合

    rdd1 = sc.parallelize([1,2,3,4,5],2)
    result2 = rdd1.aggregate(0,lambda x,y:max(x,y),lambda x,y:x+y)
    print(result2)
    
    result3 = rdd1.aggregate(0,lambda x,y:x+y,lambda x,y:x+y)
    print(result3)
    
    result4 = rdd1.aggregate(10,lambda x,y:max(x,y),lambda x,y:x+y)
    print(result4)
    
    rdd1 = sc.parallelize(["a","b","c","d","e","f"],2)
    result5 = rdd1.aggregate("",lambda x,y:x+y,lambda x,y:x+y)
    print(result5)
    
    result6 = rdd1.aggregate("|",lambda x,y:x+y,lambda x,y:x+y)
    print(result6)
    
    rdd7=sc.parallelize(["12","23","345","4567"],2)
    rdd7.aggregate('',lambda x,y:max(len(str(x)),len(str(y))),lambda x,y:str(x)+str(y))
    
  • 相关阅读:
    定位属性position,相对定位,绝对定位
    flex弹性盒模型?
    vue生命周期
    理解cookie、session、token
    前端兼容性问题
    JS 如何为一个元素怎么绑定多个事件?
    js数组的操作方法
    vue页面翻页勾选的记忆功能
    Vue中nextTick的正确使用
    Vue用router.push(传参)跳转页面,参数改变,跳转页面数据不刷新的解决办法
  • 原文地址:https://www.cnblogs.com/jiajiaba/p/10658134.html
Copyright © 2020-2023  润新知