天天看点

python spark进行大数据分析_SPARK快速大数据分析

1 数据分析导论

1.1 spark 是什么

1.1.1 特点(内存中计算)

​ 实现了快速而通用的集群计算平台。扩展了MapReduce计算模型,支持更多的计算模式,包括交互处理,批处理,流出来,迭代算法。提供丰富的接口,基于python,scala,java,sql简单应用api。

1.2 spark 组成

​ Spark SQL 结构化数据,Spark Streaming 实时计算,MLib 机器学习,Gragh X 图计算,Spark Core , 独立调度器 ,YARN ,Mesos

1.2.1 Spark SQL 结构化数据

​ spark sql 是 spark 用来操作结构化数据的程序包,支持多种数据源(Hive Sql , parquet , json)。与RDD编程的数据操作方式相结合。

1.2.2 Spark Streaming 实时计算

​ spark streaming 是spark 提供对实时数据进行流失计算的组件(消息队列,服务器日志)。

1.2.3 MLlib 机器学习

​ MLlib 提供了多种的机器学习算法,分类,回归,聚类,协同过滤等。提供模型评估、数据导入等额外的支持功能

1.2.4 Gragh x 图计算

​ Gragh x 图计算算法

1.2.5 Spark Core

​ Spark Core 实现 spark 的基本功能,包含任务调度,内存管理,错误恢复,与存储系统交互模块。对弹性分布式数据集RDD的定义

1.2.6 集群管理器

​ 设计实现可以一个计算结点到几千个计算结点之间伸缩计算,支持各种集群管理器

2 spark 下载与入门

2.1 下载链接

cd ~

tar -xf spark-1.2.0-bin-hadoop2.4.tgz

cd spark-1.2.0-bin-hadoop2.4

ls

/bin :spark交互可执行文件

/core streaming python 主要组件源代码

/examples 可以查看运行的API

2.2 Spark - pySpark与scala的shell

​ 启动命令

bin/pySpark bin/spark-shell

​ 修改日志级别:/conf/log4j.properties log4j.rootCategory=INFO,console=>WARN,console

2.2.1 Scala 行数统计

val lines = sc.textFile("README.md");

lines.count();

lines.first();

​ 退出命令

ctrl + d

2.3 Spark 核心概念

​ 每一个Spark 应用都由一个驱动器程序发起集群上的各种并行操作,驱动器程序包含应用main函数且定义集群上的分布式数据集。驱动程序通过一个SparkContext对象访问spark。这个对象代表着对计算集群的一个连接。shell启动自动创建一个sparkcontext对象。然后就可以创建RDD。然后进行各种操作。比如sc.textFile()

val lines = sc.textFile("README.md");

var pyLines = lines.filter(_.contains("Python"))

pyLines.first();

2.3.1 初始化SparkContext

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

import org.apache.spark.SparkContext._

val conf = new SparkConf().setMaster("local").setAppName("test")//集群的url,应用名称初始化配置val sc = new SpackContext(conf)//创建RDD

2.3.2 单词统计

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

import org.apache.spark.SparkContext._

val conf = new SparkConf().setMaster("local").setAppName("test")//集群的url,应用名称初始化配置

val sc = new SpackContext(conf)//创建RDD

val input = sc.textFile(inputFile)

val words = input.flatMap(line =>line.split(" "));

val counts = words.map(word=>(word, 1)).reduceByKey{case(x,y) => x+y}