Spark学习笔记:(一)入门 glance
Apache Spark是一个新兴大数据处理引擎,Scala是其编程语言,也支持python和java。Spark主要特点是提供了一个集群的分布式内存抽象(即RDD,操作本地集合->操作分布式数据集),以支持需要工作集的应用。
- 通过shell使用Scala,Python,Java的API,使用MLib或SQL等tools。
- 编程application。
- Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,对于迭代运算效率更高;
- 提供的数据集操作类型(Transformations+Actions)有很多种,不像Hadoop只提供了Map和Reduce两种操作。
- Spark支持故障恢复的方式也不同,提供两种方式,Linage,通过数据的血缘关系,再执行一遍前面的处理,Checkpoint,将数据集存储到持久存储中。
- Spark的优势不仅体现在性能提升上的,Spark框架为批处理(Spark Core),交互式(Spark SQL),流式(Spark Streaming),机器学习(MLlib),图计算(GraphX)提供一个统一的数据处理平台,这相对于使用Hadoop有很大优势。
1.RDD(Resilient Distributed Dataset,弹性分布数据集),RDD就是一个不可变的带分区的记录集合,RDD也是Spark中的编程模型。RDDs can be created from Hadoop InputFormats (such as HDFS files) or by transforming other RDDs.
- scala> val textFile = sc.textFile("README.md")
- textFile: spark.RDD[String] = spark.MappedRDD@2ee9b6e3 //这是输出
- 表示已被分区,不可变的并能够被并行操作的数据集合,不同的数据集格式对应不同的RDD实现。
- RDD必须是可序列化的。静态类型。
- 可以控制存储级别(内存、磁盘等)来进行重用。当内存不足时,RDD会spill到disk。
- 可以cache到内存中,每次 对RDD数据集的操作之后的结果,都可以存放到内存中,下一个操作可以直接从内存中输入,省去了MapReduce大量的磁盘IO操作。这对于迭代运算比 较常见的机器学习算法, 交互式数据挖掘来说,效率提升比较大。
- ./bin/spark-shell
- 转换是用来定义一个新的RDD,包括map, flatMap, filter, union, sample, join, groupByKey, cogroup, ReduceByKey, cros, sortByKey, mapValues等。
- scala> val linesWithSpark = textFile.filter(line => line.contains("Spark"))
- linesWithSpark: spark.RDD[String] = spark.FilteredRDD@7dd4af09
- 动作是返回一个结果,包括collect, reduce, count, save, lookupKey。
- scala> textFile.count() // Number of items in this RDD
- res0: Long = 126
- scala> textFile.first() // First item in this RDD
- res1: String = # Apache Spark
- chain together transformations and actions:
- scala> textFile.filter(line => line.contains("Spark")).count() // How many lines contain "Spark"?
- res3: Long = 15
- val spark = new SparkContext(master, appName, [sparkHome], [jars])
- val file = spark.textFile("hdfs://...")
- val counts = file.flatMap(line => line.split(" "))
- .map(word => (word, 1))
- .reduceByKey(_ + _)
- counts.saveAsTextFile("hdfs://...")
其中的file是根据HDFS上的文件创建的RDD,后面的flatMap,map,reduceByKe都创建出一个新的RDD,一个简短的程序就能够执行很多个转换和动作。
在Spark中,所有RDD的转换都是是惰性求值的。RDD的转换操作会生成新的RDD,新的RDD的数据依赖于原来的RDD的数据,每个RDD又包含多个分区。那么一段程序实际上就构造了一个由相互依赖的多个RDD组成的有向无环图(DAG)。并通过在RDD上执行动作将这个有向无环图作为一个Job提交给Spark执行。
5.将RDD写入缓存会大大提高处理效率。
- scala> linesWithSpark.cache()
- res7: spark.RDD[String] = spark.FilteredRDD@17e51082
- scala> linesWithSpark.count()
- res8: Long = 15
6.编程
- /* SimpleApp.scala */
- import org.apache.spark.SparkContext
- import org.apache.spark.SparkContext._
- import org.apache.spark.SparkConf
- object SimpleApp {
- def main(args: Array[String]) {
- val logFile = "YOUR_SPARK_HOME/README.md" // Should be some file on your system
- val conf = new SparkConf().setAppName("Simple Application")
- val sc = new SparkContext(conf)
- val logData = sc.textFile(logFile, 2).cache()
- val numAs = logData.filter(line => line.contains("a")).count()
- val numBs = logData.filter(line => line.contains("b")).count()
- println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
- }
- }
use the spark-submit
script to run program
- # Your directory layout should look like this
- $ find .
- .
- ./simple.sbt
- ./src
- ./src/main
- ./src/main/scala
- ./src/main/scala/SimpleApp.scala
- # Package a jar containing your application
- $ sbt package
- ...
- [info] Packaging {..}/{..}/target/scala-2.10/simple-project_2.10-1.0.jar
- # Use spark-submit to run your application
- $ YOUR_SPARK_HOME/bin/spark-submit \
- --class "SimpleApp" \
- --master local[4] \
- target/scala-2.10/simple-project_2.10-1.0.jar
- ...
- Lines with a: 46, Lines with b: 23
Spark学习笔记:(一)入门 glance的更多相关文章
- spark学习笔记总结-spark入门资料精化
Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用. ...
- Spark学习笔记之SparkRDD
Spark学习笔记之SparkRDD 一. 基本概念 RDD(resilient distributed datasets)弹性分布式数据集. 来自于两方面 ① 内存集合和外部存储系统 ② ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- WebSocket学习笔记——无痛入门
WebSocket学习笔记——无痛入门 标签: websocket 2014-04-09 22:05 4987人阅读 评论(1) 收藏 举报 分类: 物联网学习笔记(37) 版权声明:本文为博主原 ...
- Spark学习笔记2(spark所需环境配置
Spark学习笔记2 配置spark所需环境 1.首先先把本地的maven的压缩包解压到本地文件夹中,安装好本地的maven客户端程序,版本没有什么要求 不需要最新版的maven客户端. 解压完成之后 ...
- Spark学习笔记3(IDEA编写scala代码并打包上传集群运行)
Spark学习笔记3 IDEA编写scala代码并打包上传集群运行 我们在IDEA上的maven项目已经搭建完成了,现在可以写一个简单的spark代码并且打成jar包 上传至集群,来检验一下我们的sp ...
- Spark学习笔记-GraphX-1
Spark学习笔记-GraphX-1 标签: SparkGraphGraphX图计算 2014-09-29 13:04 2339人阅读 评论(0) 收藏 举报 分类: Spark(8) 版权声明: ...
- Java学习笔记之---入门
Java学习笔记之---入门 一. 为什么要在众多的编程语言中选择Java? java是一种纯面向对象的编程语言 java学习起来比较简单,适合初学者使用 java可以跨平台,即在Windows操作系 ...
- Spark学习笔记3——RDD(下)
目录 Spark学习笔记3--RDD(下) 向Spark传递函数 通过匿名内部类 通过具名类传递 通过带参数的 Java 函数类传递 通过 lambda 表达式传递(仅限于 Java 8 及以上) 常 ...
- Spark学习笔记0——简单了解和技术架构
目录 Spark学习笔记0--简单了解和技术架构 什么是Spark 技术架构和软件栈 Spark Core Spark SQL Spark Streaming MLlib GraphX 集群管理器 受 ...
随机推荐
- hdu6061[NTT推公式] 2017多校3
/*hdu6061[NTT推公式] 2017多校3*/ #include <bits/stdc++.h> using namespace std; typedef long long LL ...
- Python之FTP传输
访问FTP,无非两件事情:upload和download,最近在项目中需要从ftp下载大量文件,然后我就试着去实验自己的ftp操作类,如下(PS:此段有问题,别复制使用,可以参考去试验自己的ftp类! ...
- [BZOJ1578] [Usaco2009 Feb]Stock Market 股票市场(DP)
传送门 可以看出 第一天买,第三天卖 == 第一天买,第二天卖完再买,第三天卖 所以我们只考虑前一天买,后一天卖即可 那么有按天数来划分 f[i][j]表示前i天,共有j元,最大的盈利 第一维可以省去 ...
- 建筑抢修 BZOJ 1029
建筑抢修 [问题描述] 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修 ...
- windows下模拟linux命令的工具 xshell
windows下模拟linux命令的工具 xshell
- js react 全选和反选
onCheckAll = (data) => { var CheckBox = document.getElementsByName(data); for(let i=0;i<CheckB ...
- codevs——1036 商务旅行
1036 商务旅行 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 某首都城市的商人要经常 ...
- Spring MVC使用Schedule实现定时任务
Schedule存在spring-context.jar包中. 实现简单步骤: 1.配置bean.xml开启定时任务支持. <?xml version="1.0" encod ...
- [原创]安装Ubuntu Server 14.04后
安装后许多软件都没有,需要进行安装. 官方指南:https://help.ubuntu.com/lts/serverguide/index.html 1.修改网络配置文件 用ifconfig查看本地网 ...
- SolidEdge如何绘制变化半径倒圆角
1 在要变化半径的边上打一些点 2 点击倒角命令的参数对话框,选择可变半径 3 选择倒角的直线,右击确认,再依次点击关键点,修改倒角数值,修改之后按回车,继续下一个点,直到结束.