Spark程序设计——基本流程
来源:互联网 发布:matlab定义字符串数组 编辑:程序博客网 时间:2024/05/01 10:56
一、基本流程
1.创建SparkContext对象
——封装了spark执行环境信息
2.创建RDD
——可从Scala集合或Hadoop数据集上创建
3.在RDD之上进行转换和action
——Spark提供了多种转换和action函数
4.返回结果
——保存到HDFS中,或直接打印出来
二、代码示例
(一)创建SparkContext(spark程序中只能有一个)
1.创建conf ,封装了spark配置信息
val conf=new SparkConf().setAppName(appName)//作业名称conf.set("spark.app.name","MyFirstProgram")//设置内存cpu等资源conf.set("spark.yarn.queue","infrastructure")//提交到哪个队列,缺省-默认值
2.创建SparkContext,封装了调度器等信息
val sc=new SparkContext(conf)
(二)创建RDD
sc.parallelize(List(1,2,3),2)//对List(1,2,3)进行并行化,并行度为2,第二个参数可以不写,默认值1
1.文本文件(TextInputFormat)
sc.textFile("file.txt")//将本地文件加载成RDDsc.textFile("diretory/*.txt")//将某类文本文件加载成RDDsc.textFile("hdfs://nn:9000/path/file")//HDFS文件或目录
2.sequenceFile(SequenceFileInputFormat)
sc.sequenceFile("file.txt")//将本地二进制文件加载成RDDsc.sequenceFile[String,Int]("hdfs://nn:9000/path/file")
3.使用任意自定义的Hadoop InputFormat(源自hadoop的组件)
sc.hadoopFile(path,inputFmt,keyClass,valClass)
HDFS
inputRdd=sc.textFile("/data/input")//文件可能本地也可能是hdfs,来源于上下文取决于环境变量的设置inputRdd=sc.textFile("file:///data/input")//本地文件,寻找运行节点的本地文件inputRdd=sc.textFile("hdfs:///data/input")inputRdd=sc.textFile("hdfs://namenode:8020/data/input")
生成的RDD有几个partition,取决于存储文件的block数量,默认情况一一映射。
使用自定义InputFormat
(1).NLineInputFormat
将文本文件中的N行作为一个input spilt,由一个Map Task处理
(2).使用NLineInputFormat
(三)创建RDD:HBase
import org.apache.spark._import org.apache.hadoop.hbase.mapreduce.TableInputFormat//创建SparkContextval sparkConf=new SparkConf()val sc=new SparkContext(conf)//设置hbase configurationval hbaseConf=HBaseConfiguration.create()hbaseConf.addResource(new Path("hbase-site.xml"))hbaseConf.set(TableInputFormat.INPUT_TABLE,tableName)//创建hbase RDDval hBaseRDD=sc.newAPIHadoopRDD(hbaseConf,classOf[TableInputFormat],classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],classOf[org.apache.hadoop.hbase.client.Result])//获取总行数val count=hBaseRDD.count()
(四)transformation与action
Transformation:将一个RDD通过一种规则,映射成另外一种RDD;
Action:返回结果或者保存结果,只有action才会触发程序的执行。
RDD transformation
//创建RDDval listRdd=sc.parallelize(List(1,2,3),3)//将RDD传入函数,生成新的RDDval squares=listRdd.map(x=>x*x) //{1,4,9}//对RDD中元素进行过滤,生成新的RDDval even=squares.filter(_%2==0)//{4}//将一个元素映射成多个,生成新的RDD。map映射,flat过滤nums.flatMap(x=>1 to x) //=>{1,1,2,1,2,3}
RDD Action
//创建新的RDDval nums=sc.parallelize(List(1,2,3),2)//将RDD保存为本地集合(返回到driver端)nums.collect() //=>Array(1,2,3)//返回前k个元素nums.take(2) //=>Array(1,2)//计算元素总数nums.reduce() //=>3//合并集合元素nums.reduce(_+_) //=>6//将RDD写到HDFS中nums.saveAsTextFile("hdfs://nn:8020/output")nums.saveAsSequenceFile("hdfs://nn:8020/output")
将RDD保存到HBase
(五)Key/Value类型的RDD
val pets=sc.parallelize(List(("cat",1),("dog",1),("cat",2)))pets.reduceByKey(_+_)//=>{(cat,3),(dog,1)}pets.groupByKey()//=>{(cat,Seq(1,2)),(dog,Seq(1))}pets.sortByKey()//=>{(cat,1),(cat,2),(dog,1)}
reduceBykey自动在map端进行本地combine
- Spark程序设计——基本流程
- Spark程序设计——Scala
- Spark程序设计—创建初始RDD
- Shell程序设计(二)—流程控制
- Spark学习——RDD基本操作
- Spark程序设计——应用(wordcount、join)
- Spark程序设计——accumulator、广播变量、cache
- Java基础2——基本程序设计
- 基本TCP客户—服务器程序设计基本框架
- 深入Spark内核:任务调度(1)-基本流程
- 深入Spark内核:任务调度(1)-基本流程
- Spark基本工作流程及YARN cluster模式原理
- Spark的重要组件和基本工作流程
- 《JavaScript高级程序设计》笔记——chapter3 流程语句
- Spark源码走读(一) —— Spark应用提交流程
- Spark修炼之道(高级篇)——Spark源码阅读:第一节 Spark应用程序提交流程
- Spark修炼之道(高级篇)——Spark源码阅读:第一节 Spark应用程序提交流程
- Spark修炼之道(高级篇)——Spark源码阅读:第十二节 Spark SQL 处理流程分析
- HDU_4585_Shaolin
- android view怎样刷新
- 【信息论】信源与信源熵(三)
- 导数 学习笔记
- 关于linux脚本编程的一些笔记
- Spark程序设计——基本流程
- 怎样让自己与众不同
- 层次分析法
- C++学习笔记之函数指针
- 字符串截取
- 解决自增id不连续的问题
- 祖传头文件
- Java软件体系结构设计模式之结构模式 知识点摘录
- 1008. Elevator (20)