设为首页 加入收藏

TOP

Spark学习笔记(1、Spark概览 2、RDD编程)
2019-05-15 13:06:30 】 浏览:12
Tags:Spark 学习 笔记 概览 RDD 编程

Spark学习笔记1:Spark概览

Spark是一个用来实现快速而通用的集群计算的平台
笔记1简单介绍了Spark以及Spark的各种组件
Spark Core、Spark SQL、Spark Streaming、Spark MLlib等

Spark学习笔记2:RDD编程

一个简单的单词计数的例子来开始介绍RDD编程

Spark对数据的操作无外乎创建RDD,转化已有RDD以及调用RDD操作进行求值

RDD编程:
1、创建RDD的两种方法
A、SparkContext.textFile()用来读取文本文件作为一个字符串RDD
B、把程序中一个已有的集合传给SparkContext的parallelize()方法

2、RDD操作:转化操作和行动操作

常见转化操作有:

  • map()操作用于接收一个函数,把这个函数用于RDD中的每个元素,将函数的返回结果作为结果RDD中对应元素的值。如 val counts = words.map(word =>(word,1)) 将每一个单词单词映射成键值对。
  • filter()接受函数,将RDD中满足该函数的元素放入新的RDD中返回。
  • flatMap()被分别应用到输入RDD的每个元素上,返回的是一个包含各个迭代器可访问的所有元素的RDD。可以用于将输入的字符串切分成单词。
  • 集合操作:distinct() 生成只包含不同元素的新RDD, union(other)返回一个包含两个RDD中所有元素的RDD , intersection(other)只返回两个RDD中都有的元素,subtract(other)返回只存在于第一个RDD而不存在于第二个RDD中的元素,cartesian(other)笛卡儿积,返回所有可能的(a,b)对,a,b分别来自两个不同的RDD。

常见的行动操作有:

  • count()用来返回计数结果
  • take(n)用来收集RDD中的n个元素
  • collect()用来获取整个RDD中的元素
  • reduce()用来接收一个函数作为参数,这个函数要操作两个相同元素类型的RDD数据并返回一个同样类型的新元素。 如 val sum = rdd.reduce( (x,y) => x+ y ) 用于计算输入集合中元素的和。
  • fold() 和reduce()的区别是需要指定一个初始值作为每个分区第一次调用的结果。如 val sum = rdd.fold(1)(_ + _)
  • aggregate()函数不同于fold()和reduce(),不要求返回值类型必须与所操作的RDD类型相同,使用aggregate()时需要提供返回类型的初始值。

持久化缓存

Spark在每次调用行动操作时都会重算RDD以及它的所有依赖,为了避免多次计算同一个RDD,可以让Spark对数据进行持久化

使用persist()用来把数据以序列化的形式缓存,默认情况下会缓存在JVM的堆空间中

unpersist()用于手动把持久化的RDD从缓存中移除

  • count()用来返回计数结果
  • take(n)用来收集RDD中的n个元素
  • collect()用来获取整个RDD中的元素
  • reduce()用来接收一个函数作为参数,这个函数要操作两个相同元素类型的RDD数据并返回一个同样类型的新元素。 如 val sum = rdd.reduce( (x,y) => x+ y ) 用于计算输入集合中元素的和。
  • fold() 和reduce()的区别是需要指定一个初始值作为每个分区第一次调用的结果。如 val sum = rdd.fold(1)(_ + _)
  • aggregate()函数不同于fold()和reduce(),不要求返回值类型必须与所操作的RDD类型相同,使用aggregate()时需要提供返回类型的初始值。使用aggregate()计算RDD平均值如下:


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Scala   WordCount 下一篇spark IDE:   System memory..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }