I'll try anything once

人生苦短 何妨一试

Spark之RDD的一些基础操作

我们可以使用两种方法创建RDD: 1.读取一个外部的数据集,或在驱动器程序里分发驱动器程序中的对象集合。RDD创建之后,其支持两种类型的操作:转换操作(transformation)、行动操作(action)。转换操作会由原来的RDD转换为一个新的RDD,并且转换的RDD是惰性求值,而行动操作是对数据集进行实际的计算,将最终求得的结果返回到驱动程序中,或者写入外部存储系统中。

驱动程序通过SparkContext对象访问Spark

创建之后便可创建RDD

创建RDD

  • .parallelize(…)集合(元素list或array)

  • 引用位于本地或者外部的某个文件

    spark可以从多个文件系统中读取:如NTFS、FAT这类的本地文件系统,或者HDFS、S3、Cassandra这类的分布式文件系统
    sc.textFile(...,n)第二个参数表示该数据集被划分的分区个数。经验法一般分为2、4个

转换操作(Transformation)

  • .map()
    接受一个函数,该函数用于inputRDD中的每一个元素,将函数的返回结果作为outputRDD对应的每个元素。
  • .filter()
    接受一个函数,不改变已有的inputRDD的数据,并会返回一个全新的outputRDD(即筛选inputRDD中符合要求的元素),同时nputRDD还可以继续使用。

  • .flatMap()
    与.map()类似,但是.flatMap()返回的是一个类似于pandas中series的数据集,而.map()的返回是类似于pandas的dataFramen,一个列表组。

  • .distinct()
    接受一个函数,返回指定列中不同值的一个列表,简而言之就是去重
    譬如数据为{1,2,3,3}的RDD进行.distinct()之后,为{1,2,3}
    该转换是一个高开销的方法,应谨慎使用
  • .sample()、
    返回数据集的随机样本 .sample(withReplacement, fraction, seed=None)

    1. 第一个参数指定采样是否应该替换【True|False】
    2. 第二个参数定义返回数据的分数0-1的概率
    3. 第三个参数是随机数产生器的seed
  • .leftOuterJoin()
    类似与SQL,根据两个数据集中都有的值来链接两个RDD,同样也是高销的方法,慎用
  • .repartition()
    顾名思义,其功能是再分配,分区,同时因为会对数据进行重组,所以会导致性能方面产生巨大的影响。
    repartition(numPartitions)参数即重新分区的数目

    .glom()是将已经划分的数据重新整合到一个列表中

行动操作(action)

  • .take()
    返回单个数据分区的前n行

  • .collect()
    将所有的RDD元素返回

  • .reduce()
    按照一定的要求减少RDD中的元素

  • .reduceByKey()
    一样的,只不过操作的是key值

  • .count()
    统计inputRDD中的元素的数量

  • .saveAsTextFile()
    保存问文本文件

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注