zoukankan      html  css  js  c++  java
  • Spark MLlib和Sprk GraphX

    Spark MLlib

    MLlib 是 Spark 可以扩展的机器学习库

    MLlib is Apache Spark’s scalable machine learning library.

    一、MLlib概述

    MLlib 是 Spark 可以扩展的机器学习库

    Spark在机器学习方面具有得天独厚的有事,有以下几个原因:

    1、机器学习算法

    一般都有多个步骤迭代计算,需要在多次迭代后,获得足够小的误差或者收敛才会停止

    double wucha = 1.0
    while(wucha>=0.00001){
    建模 wucha -= 某个值
    }

    模型计算完毕

    当迭代使用Hadoop的MapReduce计算框架时,每次都要读写硬盘以及任务启动工作,导致很大的IO开销

    而Spark基于内存的计算模型天生擅长迭代计算。只有在必要时,才会读写硬盘

    所以Spark是机器学习比较理想的平台

    2、通信

    Hadoop的MapReduce计算框架,通过heartbeat方式来进行通信和传递数据,执行速度慢

    spark 有高效的 Akka 和 Netty 的通信系统,通行效率高

    Spark MLlib 是Spark 对常用的机器学习算法的实现库,同时包括相关测试和数据生成器

    二、什么是机器学习

    1、机器学习的定义

    A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P,
    if its performance at tasks in T, as measured by P, improves with experience E

    三个关键词:算法、经验、模型评价

    在数据的基础上,通过算法构建出模型,并进行评价
    如果达到要求,则用该模型测试其他数据
    如果不达到要求,要调整算法来重新建立模型,再次进行评估
    循环往复,知道获得满意的经验

    应用:金融反欺诈、语音识别、自然语言处理、翻译、模式识别、智能控制等等

    2、基于大数据的机器学习

    传统的机器学习算法,由于技术和单机存储的现值,只能在少量数据上使用
    即,依赖于数据抽样
    问题:很难做好随机,导致学习的模型不准确

    在大数据上进行机器学习,直接处理全量数据并进行大量迭代计算

    Spark本身计算优势,适合机器学习

    另外 spark-shell pyspark 都可以提供及时查询工具

    3、MLlib

    MLlib是Spark机器学习库,简化机器学习的工程实践工作,方便扩展到更大规模
    集成了通用的学习算法:分类、回归、聚类、协同过滤、降维等等

    另外,MLlib本身在Spark中,数据清洗、SQL、建模放在一起

    sample_linear_regression_data.txt
    1 1:1.9
    2 1:3.1
    3 1:4
    3.5 1:4.45
    4 1:5.02
    9 1:9.97
    -2 1:-0.98

    package day7
    import org.apache.spark.sql.SparkSession
    import org.apache.spark.ml.regression.LinearRegression
    /*
    * 1.3850645873427236 1:0.14476184437006356 2:-0.11280617018445871 3:-0.4385084538142101 4:-0.5961619435136434 5:0.419554626795412 6:-0.5047767472761191 7:0.457180284958592 8:-0.9129360314541999 9:-0.6320022059786656 10:-0.44989608519659363
    *
    */
    object Demo1 {
    def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().appName("Demo1").master("local").getOrCreate()
    val data_path = "H:\sample_linear_regression_data.txt"
    //读取训练数据
    val trainning = spark.read.format("libsvm").load(data_path)
    //定义模型
    val lr = new LinearRegression().setMaxIter(10000)
    //训练模型
    val lrModel = lr.fit(trainning)
    //获取模型训练结果
    val trainningSummary = lrModel.summary
    //获取预测值
    trainningSummary.predictions.show()
    //获取误差
    print(trainningSummary.rootMeanSquaredError)
    spark.stop()
    }
    }

    Spark Graphx

    一、Spark Graphx 是什么?

    1、是Spark 的一个模块,主要用于进行以图为核心的计算,还有分布式图计算

    2、Graphx 底层基于RDD计算,和RDD共用一种存储形态。在展示形态上,可以用数据集来表示,也可以用图来表示

    二、Spark GraphX 有哪些抽象?

    1、顶点

    RDD[(VertexId,VD)]表示
    VertexId 代表了顶点的ID,是Long类型
    VD 是顶点的属性,可以是任何类型

    2、边

    RDD[Edge[ED]]表示
    Edge表示一个边
    包含一个ED类型参数来设定属性
    另外,边还包含了源顶点ID和目标顶点ID

    3、三元组

    三元组结构用RDD[EdgeTriplet[VD,ED]]表示
    三元组包含一个边、边的属性、源顶点ID、源顶点属性、目标顶点ID、目标顶点属性

    4、图

    Graph表示,通过顶点和边来构建

    package day7
    import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext
    import org.apache.spark.graphx.Edge
    import org.apache.spark.graphx.Graph
    object Demo2 {
    def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("Demo2").setMaster("local")
    //创建Spark Context对象
    val sc = new SparkContext(conf)
    //定义点
    val users = sc.parallelize(Array((3L,("TIme","student")),(5L,("Andy","student")),
    (7L,("Mary","student")),(2L,("Lily","post"))))
    //定义边
    val relationship = sc.parallelize(Array(Edge(3L,7L,"col"),Edge(5L,3L,"ad"),Edge(2L,5L,"col"),Edge(5L,7L,"heh")))
    //构建图
    val graph = Graph(users, relationship)
    //图的操作
    val post_count = graph.vertices.filter{ case (id,(name,pos)) => pos=="post"}.count
    println("post count is " + post_count)
    val edges_count = graph.edges.filter(e => e.srcId > e.dstId).count()
    println("the value is " + edges_count)
    }
    }
  • 相关阅读:
    Java基础(六)
    Java基础(五)
    Java基础(四)
    Java基础(三)
    Java变量,标识符,数据类,运算符,表达式,Scanner(二)
    Mybatis(二) SQL映射文件
    Mybatis(一) 入门
    Ubuntu 16.04安装docker详细步骤
    Ubuntu原生源
    运用 jenkins 让你的项目优雅的持续化集成
  • 原文地址:https://www.cnblogs.com/hsiehchou/p/10739005.html
Copyright © 2011-2022 走看看