数据挖掘之Spark学习

阅读路线:

  • Hadoop与Spark比较
  • Spark的安装
  • Spark知识点

一、Hadoop与Spark比较

  1. 简单的比较

刚开始学习Spark的时候,自己总是会想当然的理解两者之间的关系。Hadoop和Spark的处理任务有很多是一样的,比如说他们都是有数据计算处理的功能,但是在一些方面又并不相互重叠,比如说,Spark没有文件管理功能,因而必须依赖Hadoop分布式文件系统(HDFS)或另外某种解决方案。实际上,在Hadoop的项目页面上,Spark就被列为是一个模块。Spark有自己的页面,因为虽然它可以通过YARN(另一种资源协调者)在Hadoop集群中运行,但是它也有一种独立模式。它可以作为 Hadoop模块来运行,也可以作为独立解决方案来运行。

刚开始学习的时候,应该先了解数据处理方面的不同,Spark相比Hadoop 的MapReduce模块,Spark确实速度很快,最多比Hadoop MapReduce快100倍)。这是因为MapReduce使用持久存储,而Spark使用弹性分布式数据集(RDD)。

  1. Spark核心-RDD

RDD是一种分布式弹性数据集,将数据分布存储在不同节点的计算机内存中进行存储和处理。每次RDD对数据处理的最终结果,都分布在不同的节点中。这样的话,在进行到下一步数据处理的工作的时候,数据可以直接从内存中提取,从而省去了大量的IO操作。

另一个特性是延迟计算,即是一个完整的RDD运行任务被分成两个部分:Transformation和Action。Transformation用于对RDD的创建,同时还提供了大量的操作方法,例如map、filter、groupBy、join。Action是数据的执行部分,其通过执行count、reduce、collect等方法去真正执行数据的计算部分。实际上,RDD中所有的操作都是使用的Lazy模式进行,Lazy是一种程序优化的特殊形式。运行在编译的过程中不会立刻得到计算的最终结果,而是记住所有的操作步骤和方法,只有显式的遇到命令才进行计算。这样做的好处在于大部分的优化和前期工作在Transformation中已经执行完毕,当Action进行工作时,只需要利用全部自由完成业务的核心工作。

二、Spark 的安装

首先建议大家安装spark2.0之后的版本(具体是有多少有点就不说了,反正就是好学,好用)

安装spark2x之前(我是在Linux下安装的),首先要安装

  1. 安装JAVA8

CentOS下安装JDK的三种方法,这一过程中配置环境变量时可能会出错,大家一定要认真看教程。

  1. Anaconda安装

Linux下安装Anaconda,仔细看教程就会发现Anaconda的安装过程中,会提示是否配置环境变量,到时输入”yes”。有一点要注意的是,一般Linux下都自带的Python,安装anaconda时要与自带的Python版本相同,不然在数据计算的时候很容易报错。

  1. 安装scala

linux下安装 scala,看教程配置好环境变量即可。

  1. 安装Spark

下载地址,在官网上下载好之后按照默认格式下载,自己不要改。
安装Spark中配置环境变量与Scala安装方式是一样的

  1. 启动spark

我这是单机下运行的,就是说没有连接公司集群

5.1 第一种方式

cd  usr/spark/spark-2.0.2-bin-hadoop2.7   (进入到自己spark目录下)
PYSPARK_DRIVER_PYTHON=ipython ./bin/pyspark   (启动)

5.2 直接在终端输入pyspark

5.3 如果是想运行含有spark API的Python文件

cd  /usr/spark/spark-2.0.2-bin-hadoop2.7   (进入到自己spark目录下)

./bin/spark-submit /usr/xxx/abc.py    ('/usr/xxx/abc.py'是自己的文件路径)

三、Spark知识点

在最近的项目中,自己主要利用spark在做数据处理,没有涉及到建模的部分,所以简单的总结如下:

  1. 数据的读取
lines = sc.textFile("examples/src/main/resources/people.txt") #读到的数据是RDD格式

lines=spark.read.json("examples/src/main/resources/people,json")#读到的数据是Dataframe格式
  1. RDD
#结合RDD的map函数,可以对数据的每一行进行操作,非常的方便
parts = lines.map(lambda l: l.split(","))
  1. Dataframe
schemaPeople.createOrReplaceTempView("people")
#其中schemaPeople是Dataframe数据,people是创建的临时视图,对临时视表可以直接进行SQL的操作,所以数据处理起来也是比较简单的

results = spark.sql("SELECT name FROM people")
#此时的results又变成了Dataframe数据

其中如果想改变数据的格式或是Dataframe的列名,也是可以把Dataframe改变成RDD,然后再进行每一行的操作。

lon_lat=lon_lat.rdd.map(lambda p:Row(lat1=float(p["lat"]),lon1=float(p["lon"]))

参考:
更多的spark知识点
spark常用函数

    原文作者:凡人求索
    原文地址: https://www.jianshu.com/p/9cf9aab8817b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞