分享

Spark2: 对RDD进行编程系列

问题导读
1、什么是Actions?
2、怎么对RDD做持久化?
3、 union和intersection各有什么不同?





首先,什么是RDD?
1 官方定义
Resilient Distributed Dataset (RDD)

Each RDD is split into multiple partitions, which may be computed on different nodes of the cluster.
其实就是说一个数据集,比如吧,一个100G的大文件,就是一个RDD,但是它是分布式的,

也就是说会分成若干块,每块会存在于集群中的一个或者多个节点上。

简单来说,就是分而存之。

2 持久化

只要你需要,你可以把这个RDD持久化,语法就是 RDD.persist()。

RDD中的概念

Transformations are operations on RDDs that return a new RDD.
比如
  1. val inputRDD = sc.textFile("log.txt")
  2. val errorsRDD = inputRDD.filter(line => line.contains("error"))
复制代码



这里只是重新生成了一个RDD集合,如果你在inputRDD基础上生成了2个集合,

你可以用union()来达到并集的目的!

Actions
比如
  1. println("Here are 10 examples:")
  2. badLinesRDD.take(10).foreach(println)
复制代码


意思就是取出前10条分别打印!

collect()可以用来检索整个RDD,但是保证结果可以放在一个机器的内存里,所以collect()不适合处理大量的数据集。

saveAsTextFileaction和 saveAsSequenceFile可以用来保存文件到外部文件系统中!

----------示意图
1.jpg


再来几个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. // Problem: "isMatch" means "this.isMatch", so we pass all of "this"
  7. rdd.map(isMatch)
  8. }
  9. def getMatchesFieldReference(rdd: RDD[String]): RDD[String] = {
  10. // Problem: "query" means "this.query", so we pass all of "this"
  11. rdd.map(x => x.split(query))
  12. }
  13. def getMatchesNoReference(rdd: RDD[String]): RDD[String] = {
  14. // Safe: extract just the field we need into a local variable
  15. val query_ = this.query
  16. rdd.map(x => x.split(query_))
  17. }
  18. }
复制代码


---

关于map

The map transformation takes in a function and applies it to each
element in the RDD with the result of the function being the new value of each element
in the resulting RDD.

意思很简单,自己体会即可!

---

关于map和 filter
1.jpg



例子:
  1. val input = sc.parallelize(List(1, 2, 3, 4))
  2. val result = input.map(x => x*x)
  3. println(result.collect())
复制代码



例子2:
  1. val lines = sc.parallelize(List("hello world", "hi"))
  2. val words = lines.flatMap(line => line.split(" "))
  3. words.first() // returns "hello"
复制代码


======================================

其它一些操作示意图:
1.jpg



union包含重复的,intersection去掉重复的

也可以做一个笛卡尔乘积:

已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条