• spark入门(二)RDD基础操作


    1 简述

    spark中的RDD是一个分布式的元素集合。

    在spark中,对数据的所有操作不外乎创建RDD,转化RDD以及调用RDD操作进行求值,而这些操作,spark会自动将RDD中的数据分发到集群上,并将操作并行执行。

    2 创建 RDD

    创建RDD分两种:读取外部数据集,在程序中对一个集合进行并行化。

    2.1 读取外部数据集:

    常用的方式是读取外部的数据集,比如文本文件读入为一个RDD:

    scalac版:

    val lines = sc.textFile("D:workspacescala_workspacedemo.txt")

    java版:

    JavaRDD<String> lines = sc.textFile("D:workspacejava_workspacedemo.txt");

    2.2 在程序中对集合进行并行化:

    最简单的方法是把集合传给SparkContext中的parallelize()方法:

    scalac版:

    val lines = sc.parallelize(["a", "b"])

     java版:

    JavaRDD<String> lines = sc.parallelize(Arrays.asList("a", "b"));

    3 转化操作

    RDD的转化操作是返回新的RDD的操作。

    假设有一个日文件log.txt,希望筛选出包含error的记录。使用rdd的filter()方法如下操作:

    scalac版:

    val rdd = sc.textFile("log.txt")
    val errorRDD = rdd .filter(line => line.contains("error"))

     java版:

    JavaRDD<String> rdd = sc.textFile("log.txt");
    JavaRDD<String> errorRDD = rdd.filter (
        new Function<String, Boolean>() {
            public Boolean call(String str) {
                return str.contains("errors");
            } 
        }   
    )        

    注意:filter()方法不会改变已有的rdd中的数据。

    4 向spark 传递函数

    4.1 scala

    在Scala中,我们可以传递定义的内联函数,引用方法:

     1 class SearchFunctions(val query: String) {
     2   def isMatch(s: String): Boolean = {
     3     s.contains(query)
     4   }
     5   def getMatchesFunctionReference(rdd: RDD[String]): RDD[String] = {
     6     rdd.map(isMatch)
     7   }
     8   def getMatchesFieldReference(rdd: RDD[String]): RDD[String] = {
     9     rdd.map(x => x.split(query))
    10   }
    11   def getMatchesNoReference(rdd: RDD[String]): RDD[String] = {
    12     val query_ = this.query
    13     rdd.map(x => x.split(query_))
    14   }
    15 }

    4.2 java

     1 class Contains implements Function<String, Boolean>() {
     2     private String query;
     3 
     4     public Contains(String query) { this.query = query; }
     5 
     6     public Boolean call(String x) { return x.contains(query); }
     7 }
     8 
     9
    10 RDD<String> errors = lines.filter(new Contains("error"));

     

  • 相关阅读:
    git 比较两个分支日志和文件的差异
    Interspeech 2020调研:文本前端
    centOS 7 修改分辨率、图形与命令行界面切换
    pdf表格提取camelot安装教程
    CFS任务的负载均衡——2
    CFS任务的负载均衡(框架篇)——(1)
    ftrace笔记一
    红黑树rbtree学习笔记
    一. scheduler相关结构体简介
    cpu_capacity、task_util、cpu_util计算方法
  • 原文地址:https://www.cnblogs.com/zcjcsl/p/7923330.html
Copyright © 2020-2023  润新知