1 简述

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

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

2 创建 RDD

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

2.1 读取外部数据集:

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

scalac版:

val lines = sc.textFile("D:\workspace\scala_workspace\demo.txt")

java版:

JavaRDD<String> lines = sc.textFile("D:\workspace\java_workspace\demo.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中,我们可以传递定义的内联函数,引用方法:

 class SearchFunctions(val query: String) {
  def isMatch(s: String): Boolean = {
    s.contains(query)
  }
  def getMatchesFunctionReference(rdd: RDD[String]): RDD[String] = {
    rdd.map(isMatch)
  }
  def getMatchesFieldReference(rdd: RDD[String]): RDD[String] = {
    rdd.map(x => x.split(query))
  }
  def getMatchesNoReference(rdd: RDD[String]): RDD[String] = {
    val query_ = this.query
    rdd.map(x => x.split(query_))
  }
}

4.2 java

 class Contains implements Function<String, Boolean>() {
private String query; public Contains(String query) { this.query = query; } public Boolean call(String x) { return x.contains(query); }
} RDD<String> errors = lines.filter(new Contains("error"));

spark入门(二)RDD基础操作的更多相关文章

  1. 小白学 Python 数据分析(17):Matplotlib(二)基础操作

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  2. Spark学习摘记 —— RDD行动操作API归纳

    本文参考 参考<Spark快速大数据分析>动物书中的第三章"RDD编程",前一篇文章已经概述了转化操作相关的API,本文再介绍行动操作API 和转化操作API不同的是, ...

  3. Spark学习摘记 —— RDD转化操作API归纳

    本文参考 在阅读了<Spark快速大数据分析>动物书后,大概了解到了spark常用的api,不过书中并没有给予所有api具体的示例,而且现在spark的最新版本已经上升到了2.4.5,动物 ...

  4. Elasticsearch学习系列二(基础操作)

    本文将分为3块讲解Es的基础操作.分别为:索引(index).映射(mapping).文档(document). 索引操作 创建索引库 语法: PUT /索引名称{ "settings&qu ...

  5. spark Pair RDD 基础操作

    下面是Pair RDD的API讲解 转化操作 reduceByKey:合并具有相同键的值: groupByKey:对具有相同键的值进行分组: keys:返回一个仅包含键值的RDD: values:返回 ...

  6. Zookeeper入门(二)之基础

    在深入了解ZooKeeper的运作之前,让我们来看看ZooKeeper的基本概念.本文主要包含如下内容:1.Architecture(架构)2.Hierarchical namespace(层次命名空 ...

  7. spark 学习(二) RDD及共享变量

    声明:本文基于spark的programming guide,并融合自己的相关理解整理而成      Spark应用程序总是包括着一个driver program(驱动程序),它运行着用户的main方 ...

  8. Kinect for Windows SDK开发入门(二):基础知识 上

    原文来自:http://www.cnblogs.com/yangecnu/archive/2012/03/31/KinectSDK_Application_Fundamentals_Part1.htm ...

  9. Linux 入门教程:基础操作 01

    1.1 实验内容 实验楼环境介绍 常用 Shell 命令及快捷键 Linux 使用小技巧 1.2 实验知识点 Linux 基本命令 通配符的使用 查看帮助文档 终端的概念 通常我们在使用 Linux ...

随机推荐

  1. JavaScript知识树

  2. 合并 && 还原属性链

    效果 原数据 { "id": 10, "text": { "title": "title", "content ...

  3. 不得不说,我太佩服node了,连openXML也搞定了!

    https://github.com/Ziv-Barber/officegen 开源项目地址 使用报告等有空完成!

  4. p批处理替换目录下文本中的字符串

    @echo off rem 进入批处理文件所在的路径 cd C:\Users\zxh\Desktop\ " as "abc" ***** rem 定义要替换的新旧字符串 ...

  5. QList, QLinkedList, QVector, QStack, QQueue的区别,以前也没见过QCache,而且可以自定义cost

    http://doc.qt.io/qt-4.8/containers.html http://doc.qt.io/qt-4.8/qcache.html

  6. mysql启动脚本

    一台服务器上安装多个MySQL实例之后,实例的启动关闭不能再用service mysqld start/stop/restart命令,所以编写如下脚本用于启动关闭对应端口的实例. 这个脚本适用于多实例 ...

  7. 解决 ThinkPHP Undefined class constant 'MYSQL_ATTR_INIT_COM

    这是 php.ini 配置所导致: 放开php配置文件中被注释掉的.dll引用即可. extension=php_mysql.dllextension=php_mysqli.dllextension= ...

  8. WPF 用Main函数方式启动程序

    原文:WPF 用Main函数方式启动程序 WPF默认程序启动:新建project后自动生成的App.xaml中指定程序启动方式(StartupUri="MainWindow.xaml&quo ...

  9. BuildWinRTL.dproj 用这个重新编译就行

    BuildWinRTL.dproj 用这个重新编译就行 我每次安装新版本,都删掉了这两个函数 {$IFDEF DEBUG}exports  dbkFCallWrapperAddr,{$IF defin ...

  10. uint16,uint32是什么?

    记得之前在刷笔试题的时候就看见过这个问题,发现当时上网百度后又忘了. 最近在看CryEngine3引擎代码的时候又晕了,趁现在赶紧记下来~ 在查看CE3的代码时我发现了这个变量,TFlowNodeId ...