zoukankan      html  css  js  c++  java
  • Spark之RDD编程

      Spark对数据的核心抽象——弹性分布式数据集(Resilient Distributed Dataset),简称RDD。RDD其实就是分布式的元素集合。在Spark中,对数据的所有操作不外乎创建RDD、转化已有RDD以及调用RDD操作进行求值。而在这背后,Spark会自动将RDD中的数据分发到集群中,并行化执行。

    一、创建RDD

    将程序中已有的集合传给SparkContext的parallelize()方法:

    1、python中parallelize()方法:

    lines = sc.parallelize(["pandas","i like pandas"]) 

    2、Scala中的parallelize()方法:

    val lines = sc.parallelize(List("pandas","i like pandas")) 

    更常用的方式是从外部存储中读取数据来创建RDD:

    1、Python中的textFile()方法

    lines = sc.textFile("/path/to/readme.md")

    2、Scala中的textFile()方法

    val lines = sc.textFile("/path/to/readme.md")

    二、基本RDD

    (一)针对各个元素的转化操作

    对一个数据为{1,2,3,3}的RDD进行基本的RDD转化操作

    map()

      将函数应用在RDD中的每个元素,将返回值构成新的RDD,例:rdd.map(x =>x+1) ,结果:{2,3,4,4}

    flatmap()

      将函数应用于RDD中的每个元素,将返回的迭代器的所有内容构成新的RDD,通常用来切分单词。例:rdd.flatMap(x=>x.to(3)),结果:{1,2,3,2,3,3,3}

    filter()

      返回一个由通过传给filter()的函数的元素组成的RDD。例:rdd.filter(x=>x!=1),结果{2,3,3}

    distinct()

      去重。例:rdd.distinct(),结果:{1,2,3}

    sample(withReplacement,fraction,[seed])

      对RDD采样,以及是否替换。例:rdd.sample(false,0.5),结果:非确定的。

    对数据分别为{1,2,3}和{3,4,5}的RDD进行针对两个RDD的转化操作

    union()

      生成一个包含两个RDD中所有元素的RDD。例:rdd.union(other),结果:{1,2,3,3,4,5}

    intersection()

      交集,求两个RDD共同的元素的RDD。例:rdd.intersection(other),结果:{3}

    subtract()

      差集,移除一个RDD中的内容。例:rdd.subtract(other),结果:{1,2}

    cartesian()

      与另一个RDD的笛卡尔积。例:rdd.cartesian(other),结果:{(1,3),(1,4),(1,5)……(3,5)}

    (二)针对各个元素的行动操作

    对一个数据为{1,2,3,3}的RDD进行基本的RDD行动操作

    collect()

      返回RDD中的所有元素。例:rdd.collect(),结果:{1,2,3,3}

    count()

      RDD中的元素个数。例:rdd.count(),结果:4

    countByValue()

      各元素在RDD中出现的次数。例:rdd.countByValue(),结果:{(1,1),(2,1),(3,2)}

    take(num)

      从RDD中返回num个元素。例:rdd.take(2),结果:{1,2}

    top(num)

      从RDD中返回最前面的num个元素。例:rdd.top(2),结果:{3,3}

    takeOrdered(num)(ordering)

      从RDD中按照提供的顺序返回最前面的num个元素。例:rdd.takeOrdered(2)(myOrdering),结果:{3,3}

    takeSample(withReplacement,num,[seed])

      从RDD中返回任意一些元素。例:rdd.takeSample(false,1),结果:非确定的

    reduce(func)

      并行整合RDD中所有数据。例:rdd.reduce((x,y)=>x+y),结果:9

    fold(zero)(func)

      和reduce()一样,但是需要提供初始值。例:rdd.fold(0)((x,y)=>x+y),结果:9

    aggregate(zeroValue)(seqOp,combOp)

      和reduce()相似,但是通常返回不同类型的函数。例:rdd.aggregate((0,0))((x,y)=>(x._1+y,x._2+1),(x,y)=>(x._1+y._1,x._2+y._2)),结果:(9,4)

    foreach(func)

      对RDD中的每个元素使用给定的函数。例:rdd.foreach(func),结果:无

  • 相关阅读:
    计算 MD5值
    CoreDate的使用
    Spring入门---Spring AOP编程及示例【第一天】
    Spring入门---Spring Bean的作用域【第一天】
    Spring入门---示例四----集合与数组类型注入【第一天】
    Spring入门---示例三总结反思---配置文件【第一天】
    Spring入门---示例三,Spring IOC控制反转之依赖注入【第一天】
    Spring入门---示例二,面向接口编程技术【第一天】
    Spring入门---了解七个模块,以及示例一【第一天】
    eclipse局域网项目部署(纯感想)
  • 原文地址:https://www.cnblogs.com/xiao02fang/p/12994922.html
Copyright © 2011-2022 走看看