【spark系列3】spark开发简单指南
来源:互联网 发布:大学毕业证制作软件 编辑:程序博客网 时间:2024/05/18 12:33
分布式数据集创建之textFile
scala> val distFile = sc.textFile(“data.txt”)
distFile: spark.RDD[String] = spark.HadoopRDD@1d4cee08
分布式数据集操作之转换和动作
- 转换(transformations):根据现有的数据集创建一个新的数据集
- 动作(actions):在数据集上运行计算后,返回一个值给驱动程序
数据集操作之map和reduce
distFile.map(_.size).reduce(_ + _ )
方法也接受可选的第二参数,来控制文件的分片数目。默认来说,Spark为每一块文件创建一个分片(HDFS默认的块大小为64MB),但是你可以通过传入一个更大的值来指定更多的分片。注意,你不能指定一个比块个数更少的片值(和hadoop中,Map数不能小于Block数一样)
- Map是一个转换,将数据集的每一个元素,都经过一个函数进行计算后,返回一个新的分布式数据集作为结果。
- Reduce是一个动作,将数据集的所有元素,用某个函数进行聚合,然后将最终结果返回驱动程序,而并行的reduceByKey还是返回一个分布式数据集
转换是惰性的
重要转换操作之caching(缓存)
目前支持的转换(transformation)
Transformation
Meaning
map(func)
返回一个新的分布式数据集,由每个原元素经过func函数转换后组成
filter(func)
返回一个新的数据集,由经过func函数后返回值为true的原元素组成
flatMap(func)
类似于map,但是每一个输入元素,会被映射为0到多个输出元素(因此,func函数的返回值是一个Seq,而不是单一元素)
sample(withReplacement, frac, seed)
根据给定的随机种子seed,随机抽样出数量为frac的数据
union(otherDataset)
返回一个新的数据集,由原数据集和参数联合而成
groupByKey([numTasks])
在一个由(K,V)对组成的数据集上调用,返回一个(K,Seq[V])对的数据集。注意:默认情况下,使用8个并行任务进行分组,你可以传入numTask可选参数,根据数据量设置不同数目的Task
(groupByKey和filter结合,可以实现类似Hadoop中的Reduce功能)
reduceByKey(func, [numTasks])
在一个(K,V)对的数据集上使用,返回一个(K,V)对的数据集,key相同的值,都被使用指定的reduce函数聚合到一起。和groupbykey类似,任务的个数是可以通过第二个可选参数来配置的。
join(otherDataset, [numTasks])
在类型为(K,V)和(K,W)类型的数据集上调用,返回一个(K,(V,W))对,每个key中的所有元素都在一起的数据集
groupWith(otherDataset, [numTasks])
在类型为(K,V)和(K,W)类型的数据集上调用,返回一个数据集,组成元素为(K, Seq[V], Seq[W]) Tuples。这个操作在其它框架,称为CoGroup
cartesian(otherDataset)
笛卡尔积。但在数据集T和U上调用时,返回一个(T,U)对的数据集,所有元素交互进行笛卡尔积。
sortByKey([ascendingOrder])
在类型为( K, V )的数据集上调用,返回以K为键进行排序的(K,V)对数据集。升序或者降序由boolean型的ascendingOrder参数决定
(类似于Hadoop的Map-Reduce中间阶段的Sort,按Key进行排序)
目前支持的动作(actions)
Action
Meaning
reduce(func)
通过函数func聚集数据集中的所有元素。Func函数接受2个参数,返回一个值。这个函数必须是关联性的,确保可以被正确的并发执行
collect()
在Driver的程序中,以数组的形式,返回数据集的所有元素。这通常会在使用filter或者其它操作后,返回一个足够小的数据子集再使用,直接将整个RDD集Collect返回,很可能会让Driver程序OOM
count()
返回数据集的元素个数
take(n)
返回一个数组,由数据集的前n个元素组成。注意,这个操作目前并非在多个节点上,并行执行,而是Driver程序所在机器,单机计算所有的元素
(Gateway的内存压力会增大,需要谨慎使用)
first()
返回数据集的第一个元素(类似于take(1))
saveAsTextFile(path)
将数据集的元素,以textfile的形式,保存到本地文件系统,hdfs或者任何其它hadoop支持的文件系统。Spark将会调用每个元素的toString方法,并将它转换为文件中的一行文本
saveAsSequenceFile(path)
将数据集的元素,以sequencefile的格式,保存到指定的目录下,本地系统,hdfs或者任何其它hadoop支持的文件系统。RDD的元素必须由key-value对组成,并都实现了Hadoop的Writable接口,或隐式可以转换为Writable(Spark包括了基本类型的转换,例如Int,Double,String等等)
foreach(func)
在数据集的每一个元素上,运行函数func。这通常用于更新一个累加器变量,或者和外部存储系统做交互
两种共享变量之广播变量和累加器
广播变量
broadcastVar: spark.Broadcast[Array[Int]] = spark.Broadcast(b5c40191-a864-4c7d-b9bf-d87e1a4e787c)
scala> broadcastVar.value
res0: Array[Int] = Array(1, 2, 3)
累加器
一个计数器,可以通过调用SparkContext.accumulator(V)方法来创建。运行在集群上的任务,可以使用+=来加值。然而,它们不能读取计数器的值。当Driver程序需要读取值的时候,它可以使用.value方法。
如下的解释器,展示了如何利用累加器,将一个数组里面的所有元素相加
scala> val accum = sc.accumulator(0)
accum: spark.Accumulator[Int] = 0
scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)
…
10/09/29 18:41:08 INFO SparkContext: Tasks finished in 0.317106 s
scala> accum.value
res2: Int = 10
spark的样例程序
另外,Spark包括了一些例子,在examples/src/main/scala上,有些既有Spark版本,又有本地非并行版本,允许你看到如果要让程序以集群化的方式跑起来的话,需要做什么改变。你可以运行它们,通过将类名传递给spark中的run脚本 — 例如./run spark.examples.SparkPi. 每一个样例程序,都会打印使用帮助,当运行时没任何参数时。
参考资料
1.spark随谈——开发指南(译)http://www.linuxidc.com/Linux/2013-08/88595p2.htm
/*
注:
本文所有内容来自参考资料1。
转载请注明来源:http://blog.csdn.net/ksearch/article/details/24145757
*/
- 【spark系列3】spark开发简单指南
- Spark开发指南
- spark开发指南
- spark开发指南
- Spark开发指南
- Spark开发指南
- Spark开发指南
- Spark开发指南
- spark开发指南
- Spark开发指南Spark Programming Guide
- 【Spark系列3】Spark优化
- Spark系列(3)-Spark examles运行实例
- spark系列
- Spark开发指南(0_8_1中文版)
- Spark开发指南(0.8.1中文版)
- Spark开发指南(0_8_1中文版)
- Spark开发指南(0_8_1中文版)
- Spark开发指南(0.8.1中文版)
- ios代码重构
- 微信智能小机器人 小马 智能客服 调用
- Linked List Cycle(2014.2.7)
- android中使用ant打包APK
- LBSN 预测的想法(2013.11.11)
- 【spark系列3】spark开发简单指南
- IE 滤镜实现图片旋转效果
- <%%>创建内联代码块(表达式)
- Friendship and Mobility :User Movement In Location-Based Social Networks(2013.10.10)
- AndroidManifest.xml配置文件详解
- 【NOIP2008】传纸条解题报告-双线程dp||最大费用最大流
- TCP/IP简易聊天软件C++实现 - 应用层协议
- android adb shell 命令大全
- C语言实现2048游戏