Spark入门RDD操作
来源:互联网 发布:小米文件管理器源码 编辑:程序博客网 时间:2024/05/17 21:55
RDD(Resilient Distributed Datasets),弹性分布式数据集,是Spark中的抽象数据结构类型,任何数据在Spark中都被表示为RDD.从编程的角度来看,RDD可以简单看成是一个数组.和普通数组的区别是,RDD中的数据是分区存储的,这样不同分区的数据就可以分布在不同的机器上,同时可以被并行处理。因此,Spark应用程序所做的无非是把需要处理的数据转换为RDD,然后对RDD进行一系列的变换和操作从而得到结果.Spark简单RDD入门操作。
启动spark-shell
./bin/spark-shell //启动一个spark驱动器程序driver program。默认创建了一个SparkContext对象,是一个sc的变量.
1.map
是对RDD中的每个元素都执行一个指定的函数产生一个新的RDD.任何原RDD中的元素在新RDD中都有且只有一个元素与之对应.
(1)把原RDD中每个元素都乘以2来产生一个新的RDD
scala> val a = sc.parallelize(1 to 9, 3) scala> val b = a.map(x => x*2) //只生成了1-9的九个数字scala> a.collectres10: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)scala> b.collectres11: Array[Int] = Array(2, 4, 6, 8, 10, 12, 14, 16, 18)
(2)与上述的map方法的调用时相同的
scala> val textFile = spark.read.textFile("README.md")scala> val textMap = textFile.map(line => line.split(" ").size)
2.reduce
是将RDD中元素两两传递给输入函数,同时产生一个新的值,新产生的值与RDD中下一个元素再被传递给输入函数直到最后只有一个值为止.
2.1对RDD中的元素求和
scala> val c = sc.parallelize(1 to 10)scala> c.reduce((x, y) => x + y)res4: Int = 55scala> textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b)
3.map和reduce的使用
scala> textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b)res4: Long = 15
4.flatMap
与map类似,区别是原RDD中的元素经map处理后只能生成一个元素,而原RDD中的元素经flatMap处理后可生成多个元素来构建新RDD.
(1)对原RDD中的每个元素x产生y个元素
scala> val a = sc.parallelize(1 to 4, 2)scala> val b = a.flatMap(x => 1 to x) //生成了1和1,2和1,2,3和1,2,3,4十个数字scala> b.collectres12: Array[Int] = Array(1, 1, 2, 1, 2, 3, 1, 2, 3, 4)
调用flatMap将数据集转换为字数据集,然后合并groupByKey并count计算文件中的每字计数作为(String,Long)对的数据集。要在shell中收集字数,我们可以调用collect.
scala> val wordCounts = textFile.flatMap(line => line.split(" ")).groupByKey(identity).count()wordCounts: org.apache.spark.sql.Dataset[(String, Long)] = [value: string, count(1): bigint]scala> wordCounts.collectres12: Array[(String, Long)] = Array((online,1), (graphs,1), (["Parallel,1), (["Building,1), (thread,1), (documentation,3), (command,,2), (abbreviated,1),...)
5.标记缓存
将我们的linesWithSpark数据集标记为缓存,当数据被重复访问.
org.apache.spark.storage.StorageLevel类的缓存级别:
scala> linesWithSpark.cache //cache 默认的缓存级别与persist一致,都是StorageLevel.MEMORY_ONLY,可以用unpersist来取消缓存
res14: linesWithSpark.type = [value: string]
scala> linesWithSpark.count
res15: Long = 20
scala> linesWithSpark.count
res16: Long = 20
6.Spark RDD API 操作
6.1对链表为List(1,2,3,3)的如下一元转换操作
6.2对链表为List(1,2,3)和List(3,4,5)的如下二元转换操作
6.3对链表为List(1,2,3,3)的如下行动操作
- Spark入门RDD操作
- Spark入门(四):RDD基本操作
- [Spark]Spark RDD 指南四 RDD操作
- Spark RDD操作
- spark RDD keyvalue操作
- Spark RDD transformation操作
- spark RDD transformation操作
- spark RDD 基本操作
- spark rdd 操作
- Spark RDD创建操作
- Spark中RDD操作
- Spark RDD基本操作
- spark-RDD集合操作
- Spark RDD基本操作
- spark rdd操作API
- Spark RDD操作讲解
- Spark RDD基础操作
- Spark RDD操作总结
- Android开发中为什么有些变量会以m开头
- WebStorm用法及快捷键
- UE4 在UI/UMG中显示三维模型
- lsss
- 第一阶段_第二部分_功能介绍
- Spark入门RDD操作
- Android架构设计之边界概念
- 将tf.batch_matmul替换成tf.matmul
- js匿名函数
- C# WinForm中DateTimePicker控件的Text属性和Value属性
- 模式相似性测度-距离
- 第一阶段_第三部分_光照与GI
- 搜狐[编程题]彩色宝石项链.有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等
- Unity Collider Trigger