Spark学习之RDD编程(2)

Spark学习之RDD编程(2)

1. Spark中的RDD是一个不可变的分布式对象集合。

2. 在Spark中数据的操作不外乎创建RDD、转化已有的RDD以及调用RDD操作进行求值。

3. 创建RDD:1)读取一个外部数据集2)在驱动器程序里分发驱动器程序中的对象集合。

4. RDD支持的操作:

1)转换操作,由一个RDD生成一个新的RDD。
2)行动操作,对RDD进行计算结果,并把结果返回到驱动器程序中,或者把结果存储到外部存储系统(如HDFS)。

5. Spark程序或者shell会话都会按如下方式工作:

1)从外部数据创建出输入RDD。
2)使用诸如filter()这样的转化操作对RDD进行转化,以定义一个新的RDD。
3)告诉Spark对需要被重用的中间结果RDD执行persist()操作。
4)使用行动操作 (例如count()和first()等)来触发一次并行计算,Spark会对计算进行优化后在执行。

6. 创建RDD

快速创建RDD,把程序中一个已有的集合传给SparkContext的parallelize()方法,不过这种方法除了开发原型和测试时,这种方式用的并不多。
Python中的parallelize()方法
    lines = sc.parallelize(["pandas","i like pandas"])
Scala中的parallelize()方法
    val lines = sc.parallelize(List("pandas","i like pandas"))
Java中的parallelize()方法
    JavaRDD<String> lines = sc.parallelize(Arrays.asList("pandas","i like pandas"))

7. 惰性求值

RDD的转化操作都是惰性求值的。

8. 向Spark传递函数

8.1 Python
传递比较短的函数,使用lambda表达式来传递;也可以传递顶层函数或是定义的局部函数。
8.2 Scala,可以定义的内联函数、方法的引用或静态方法传递给Spark,就行Scala的其他函数式API一样。
8.3 Java,函数需要作为实现了Spark的org.apache.spark.api.java.function包中的任一函数接口的对象来传递。

9. 常见的转化操作和行动操作

9.1 针对个元素的转化操作
flatmap()       对每个输入元素生成多个输出元素。
map()           接受一个函数,把这个函数用于RDD中的每个元素,将函数的返回结果作为结果RDD中的对应元素的。返回的类型不必和输入类型相同。
filter()        接受一个函数,并将RDD中满足该函数的元素放入新RDD中返回。
distinct()      去重
sample(withReplacement,fraction,[seed])         对RDD采样,以及是否替换
9.2 伪集合操作
合并和相交要求RDD数据类型相同。
(不需混洗)union()           生成一个包含两个RDD中所有元素的RDD
(需要混洗)intersection()    求两个RDD共同的元素的RDD
(需要混洗)subtract()        移除一个RDD中的内容
(需要混洗)cartesian)()      与另一个RDD的笛卡尔积

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏博客园迁移

序列化与ArrayList 的elementData的修饰关键字transient

  transient用来表示一个域不是该对象序行化的一部分,当一个对象被序行化的时候,transient修饰的变量不会被序列化

852
来自专栏Ryan Miao

Java对象的序列化和反序列化源码阅读

前言 序列化和反序列化看起来用的不多,但用起来就很关键,因为稍一不注意就会出现问题。序列化的应用场景在哪里?当然是数据存储和传输。比如缓存,需要将对象复刻到硬盘...

3598
来自专栏老马说编程

(62) 神奇的序列化 / 计算机程序的思维逻辑

在前面几节,我们在将对象保存到文件时,使用的是DataOutputStream,从文件读入对象时,使用的是DataInputStream, 使用它们,需要逐个处...

1916
来自专栏LuckQI

spark简单api介绍

1062
来自专栏Phoenix的Android之旅

Java transient关键字

transient关键字是开发中用的比较少的一个关键字,它在序列化和反序列化中比较重要,通常面试时会考察它的作用和它的使用场景,还有它在什么情况下会失效。

652
来自专栏高性能分布式系统设计

Hive的排序和Reduce的一个很隐蔽的问题

Reduce是通过Python进行的,完成Reduce后sort。 结果,乱序了。 分析发现:Hive按照字符串排序,而不是按照字段的double类型...

3095
来自专栏用户2442861的专栏

JAVA 对象序列化(一)——Serializable

http://www.cnblogs.com/chenfei0801/archive/2013/04/05/3001149.html

1353
来自专栏个人分享

spark transformation与action操作函数

map(func) 返回一个新的分布式数据集,由每个原元素经过函数处理后的新元素组成

1232
来自专栏java一日一条

深入分析Java的序列化与反序列化

序列化是一种对象持久化的手段。普遍应用在网络传输、RMI等场景中。本文通过分析ArrayList的序列化来介绍Java序列化的相关内容。主要涉及到以下几个问题:

631
来自专栏好好学java的技术栈

java基础提升篇:深入分析Java的序列化与反序列化

1204

扫码关注云+社区