1. Spark 为 RDD 提供的成员函数

  • .stats():包括(count:计数,mean:均值,stdev:标准差,max:最大,min:最小值)

  • countByValue:执行统计计数

    根据值统计出现的次数;

    scala> val animals = sc.parallelize(List("Dog", "Cat", "Tiger", "Cat"), 2)
    scala> animals.countByValue()
    scala.collection.Map[String,Long] = Map(Dog -> 1, Cat -> 2, Tiger -> 1)
    

    该成员函数更重要的意义在于,将数据从

    org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[8]
    

    类型变为了:

    scala.collection.Map[String,Long] = Map(Dog -> 1, Cat -> 2, Tiger -> 1)
    

2. 基本操作

val rawblocks = sc.textFile("linkage")
rawblocks
val head = rawblocks.take(10)
head.length
head.foreach(println)# 函数式编程# 将函数 println 作为参数传递给另一个函数以执行某个动作

声明函数

def isHeader(line: String) = line.contains("id_1")# 和 Python 类似,Scala 声明函数使用关键字 def# 和 Python 不同的是,我们必须为参数指定参数类型# 函数返回值无需指定类型,使用类型推断

有时候我们希望能显式地指明函数返回类型,特别是碰到函数体很长,代码复杂并且包含多个 return 语句的情况。这时,Scala 编译器不一定能推断出函数的返回类型,为了函数代码的可读性更好,也可以指明函数的返回类型。这样在阅读代码的时候,就不必重新把整个函数读一遍了。

def isHeader(line: String): Boolean = {line.contains("id_1");
}

通过用 Scala 的 Array 类的 filter 方法打印输出结果,可以在 head 数组上测试新编写的 Scala 函数:

head.filter(isHeader).foreach(println)
head.filterNot(isHeader).foreach(println)

还可以利用 Scala 对匿名函数的支持,在 filter 函数里面对 isHeader 函数取非:

head.filter(x => !isHeader(x)).foreach(println)

Scala 程序员最讨厌的就是键盘输入,因此 Scala 设计了许多小功能来减少输入,比如在匿名函数的定义中,为了定义匿名函数并给参数指定名称,只输入了字符 x => 。但像这么简单的匿名函数,甚至都没必要这么做:Scala 允许使用下划线_(正如 Python 迭代时,for _ in range(n))表示匿名函数的参数,也即这样:

head.filter(!isHeader(_)).foreach(println)

3. 用元组和 case class 对数据进行结构化

和 Python 一样,Scala 有内置 tuple 类型,可用于快速创建二元组,三元组和更多不同类型数值的集合,是一种表示记录的简单方法。

val line = head(5)
val pieces = line.split(',')

注意访问数组元素时用圆括号而不是方括号,Scala 语言访问数组元素是函数调用,不是什么特殊操作符。Scala 允许在类里定义一个特殊函数 apply,当把对象当作函数处理的时候,这个 apply 函数就会被调用,所以 head(5) 其实等价与 head.apply(5).

def toDouble(s: String) = {if ("?".equals(s)) Double.NaN else s.toDouble
}
def parse(line: String) = {val pieces = line.split(',')val id1 = pieces(0).toIntval id2 = pieces(1).toIntval scores = pieces.slice(2, 11).map(toDouble)val matched = pieces(11).toBoolean(id1, id2, scores, matched)
}

Spark 基础 —— RDD(一)相关推荐

  1. Spark 基础 —— RDD(创建 RDD)的两种方式

    弹性分布式数据集(Resilient Distributed Dataset),简称 RDD,RDD 是 Spark 所提供的最基本的数据抽象,代表分布在集群中多台机器上的对象集合.Spark 有两种 ...

  2. Spark 基础——RDD 算子

    RDD弹性分布式数据集(Resilient Distributed Dataset)是 Spark 最基本也是最根本的数据抽象 RDD 它具备像 MapReduce 等数据流模型的容错性(fault- ...

  3. Spark基础学习笔记16:创建RDD

    文章目录 零.本讲学习目标 一.RDD为何物 (一)RDD概念 (二)RDD示例 (三)RDD主要特征 二.做好准备工作 (一)准备文件 1.准备本地系统文件 2.准备HDFS系统文件 (二)启动Sp ...

  4. spark基础之RDD详解

    一 什么是RDD,有什么特点? RDD: Resilient Distributed Dataset,弹性分布式数据集. 特点: # 它是一种数据的集合 # 它可以被分区,每一个分区分布在不同的集群中 ...

  5. Spark基础知识解答

    Spark基础知识解答 一. Spark基础知识 1. Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架. Spark基于mapred ...

  6. 分布式离线计算—Spark—基础介绍

    原文作者:饥渴的小苹果 原文地址:[Spark]Spark基础教程 目录 Spark特点 Spark相对于Hadoop的优势 Spark生态系统 Spark基本概念 Spark结构设计 Spark各种 ...

  7. 【Spark】Spark基础教程知识点

    第 1 部分 Spark 基础 Spark 概述 本章介绍 Spark 的一些基本认识. Spark官方地址 一:什么是 Spark Spark 是一个快速(基于内存), 通用, 可扩展的集群计算引擎 ...

  8. Spark之RDD实战篇3

    键值对RDD.数据读取与保存.累加器.广播变量: 键值对RDD Spark 为包含键值对类型的 RDD 提供了一些专有的操作 在PairRDDFunctions专门进行了定义.这些 RDD 被称为 p ...

  9. Spark之RDD理论篇

    Spark的基石RDD: RDD与MapReduce Spark的编程模型是弹性分布式数据集(Resilient Distributed Dataset,RDD),它是MapReduce的扩展和延申, ...

最新文章

  1. java笔记之连接数据库
  2. ssl初一组周六模拟赛【2018.3.24】
  3. go去掉最后一个字符_Go语言去除字符串中的指定字符
  4. Kubernetes-ReplicaSet(RS)(五)
  5. Fragment的生命周期同一Activity下不同Fragment之间的通信
  6. 方法论+本土特色,这个BPM平台不简单
  7. 剑指offer-刷题总结
  8. 解决win10分辨率过高导致某些软件显示小的办法
  9. Prometheus + Grafana 搭建监控报警系统
  10. 三维导热问题的ADI-TDMA算法
  11. VRP基础介绍:VRP基础
  12. 立创eda学习笔记十七:铺铜
  13. 这六大要素教会你挑选合适的酒店管理系统
  14. 微信第三方登录,主要手机没有安装微信处理
  15. 微信支付开发准备工作和详细步骤
  16. 用IntelliJ IDEA看Java类图
  17. Ubuntu 20.04添加临时/永久路由
  18. ROS机器人项目开发11例-ROS Robotics Projects(10)机器人Web工具集
  19. [TJOI2017]可乐
  20. nginx设置缓存时间

热门文章

  1. Python 之 文件
  2. java 文本变量_如何将一变量作为可配置文件 java
  3. 均值滤波python实现_python手写均值滤波
  4. 机器学习代码实战——线性回归(多变量)(Linear Regression)
  5. C#与C++在语言层面的区别(不断补充)
  6. 图像处理工程师笔试题
  7. 【宏编程】word统一修改图片样式
  8. 20种语言说圣诞快乐
  9. RouteDebug.dll
  10. 分析Linux 0.11中的kernel部分的makefile文件