Spark

来源:互联网 发布:软件集成规范 编辑:程序博客网 时间:2024/05/22 05:07

欢迎使用Markdown编辑器写博客

本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:

部分代码示例:

hive -e “show tables “;
val conf=new SparkConf().setAppName().setMaster()
val sc=new SparkContext(conf)
val sqlContext=new SQLContext(sc)
val hc=new HiveContext(sc)
import sqlContext.implicits._
val lines=sc.textFile(“”).filter(!.endsWith(“”,).map(.split(“,”)).filter(x=>(x.length=3)).map(x=>Links(x(0).trim().toInt,x(1).trim().toInt)).toDF()
lines.write.mode(SaveMode.Overwrite).parquet(“/tmp/links”)
val qingxi=sc.textFile(“”,minPartitions).filter(_.contains(“key”))
val jiagong=sc.textFile(“”,minPartitions).map(x=>rebuild(x))
private def rebuild(input:String):String={
val a=input.split(“,”)
val head=a.take(2).mkString(“,”)
val tail=a.takeRight(1).mkString
val b=a.drop(2).dropRight(1).mkString.replace(“\”“,”“)
val output=head+”,”+b+”,”+tail
output
}
清洗的时候,可以采用正则表达式进行,零宽断言:第二逗号的右边最后一个逗号的左边

SQLContext创建表是临时的,HiveContext是可以将一个表保存下来的

hq.sql(“drop table if exists links”)
hq.sql(“create table if not exists links(moveId int ,imbdId int) stored as parquet “)
hq.sql(“load data inpath ‘/tmp/links’ overwrite into table links “)
sc.stop()

//RDD[Rating]需要从原始表中提取userId,movieId,rating数据,并把这数据切分成训练集和测试集数据6:4,产生模型和验证模型的

val ratings=hc.sql(“cache table ratings”)
val count=hc.sql(“select count(*) from ratings “).first().getLong(0).toInt
val percent=0.6
val trainingdatacount=(count*percent).toInt
val testdatacount=(count*(1-percent)).toInt
val trainingData=hc.sql(s”select userId,movieId,rating from ratings order by timestamp asc limit $trainingdatacount”)

用String Interpolation来SQL语句中传递参数 scala的特性的

trainingData.write.mode(SaveMode.Overwrite).parquet(“/tmp/trainingData”)
hc.sql(“drop table if exists trainingData”)
hc.sql(“create table if not exists trainingData(userId int,movieId int ,ratings double ) stored as parquet”)
hc.sql(“load data inpath ‘/tmp/trainingData’ overwrite into table trainingData”)

打开页面,Storage的属性, cache table 采用的方式in-memory Memory Deserialized

Size in memory=150MB
打开Environment属性界面,spark.executor.memory =4g 4cores 8个task
出现大量的OOM异常的,
原因是在于SQL语句中存在order by asc limit 的limit很大的数据,全表扫描的,注意OOM的异常
解决方案,是要进行拆分开的额,先要order by的,再去limit的取数据的,
val trainingDataAsc=hc.sql(s”select userId,movieId,rating from ratings order by timestamp asc “)
trainingDataAsc.write.mode(SaveMode.Overwrite).parquet(“/tmp/trainingDataAsc”)
hc.sql(“drop table if exists trainingDataAsc”)
hc.sql(“create table if not exists trainingDataAsc(userId int,movieId int ,ratings double ) stored as parquet “)
hc.sql(“load data inpath ‘/tmp/trainingDataAsc’ overwrite into table trainingDataAsc”)
先要进行一个Asc排序的DataFrame的数据集的,然后在进行一个Desc的DataFrame数据集的,分别对Asc升序的DataFrame进行limit抽样的,再对Desc降序的DataFrame进行limit的抽样的,分开进行Order by和limit的操作避免OOM的异常的,

将Row行对象进行转换为一个是Rating实体类的对象的

case class Rating(user:Int,producer:Int,rating:Double)
import org.apache.spark.mllib.recommendation._
val ratingRDD=hc.sql(“select * from trainingData”).rdd.map(x=>Rating(x.getInt(0),x.getInt(1),x.getDouble(2)))

SparkMlib ALS进行训练模型的

val model=ALS.train(ratingRDD,rank,iteration) rank=1 iteration=20
ALS的来源:
Collaborative Filtering for Implicit Feedback DataSets
Large-Scale Parallel Collaborative Filtering for the Netflix Prize

hc.sql(“desc ratings”).show()

矩阵相乘:http://baike.baidu.com/item
https://en.wikipedia.org/wiki/Collaborative_filtering
https://en.wikipedia.org/wiki/Recommender_system
https://en.wikepedia.org/wiki/Information_retrieval

数据挖掘的算法分类:
聚类:找出一系列样本的共同特征
分类:是或不是 有或没有 二选一的
协同过滤:
trait AppConf{
val conf=new SparkConf().setMaster().setAppName(0
val sc=new SparkContext(conf)
val sqlContext=new SQLContext(sc)
val hc=new HiveContext(sc)
}
object ModelTraining extends AppConf{
def main(args:Array[String]){

val trainingData=hc.sql(“select * from trainingData”)

val testData=hc.sql(“select * from testData”)

val ratingRDD=hc.sql(“select * from trainingData”).rdd.map(x=>Rating(x.getInt(0),x.getInt(1),x.getDouble(2))

val testRDD=testData.rdd.map(x=>Rating(x.getInt(0),x.getInt(1),x.getDouble(2)))

val test2=testRDD.map{case Rating(userid,movieid,rating)=>((userid,movieid),rating)}
val rank=1 //特征向量的个数
val lambda=List(0.001,0.005,0.01,0.015,0.02,0.1) //正则因子
val iteration=List(10,20,30,40)
for(l <- lambda;i<-iteration){
val model=ALS.train(ratingRDD,rank,i,l)
val predict=model.predict(training2).map{
case Rating(userid,movieid,rating)=>((userid,movieid),rating)
}
val predictAndFact=predict.join(test2)
val MSE=predictAndFact.map(x=>x._2).map{
case ((user,product),(r1,r2))=>val err=r1-r2
err*err
}.mean()
import scala.math._
val RMSE=math.sqrt(MSE) //RMSE越小代表模型越准确
var bestRMSE=Double.MaxValue
if(RMSE

性能评估

top命令看负载top -bH -p pId -n 1 | head -n 10
stack
精确定位的神器 JProfiler
jstat jmap命令行方式监控内存
精确定位MAT

网络问题:netstat iftop

  • Markdown和扩展Markdown简洁的语法
  • 代码块高亮
  • 图片链接和图片上传
  • LaTex数学公式
  • UML序列图和流程图
  • 离线写博客
  • 导入导出Markdown文件
  • 丰富的快捷键

快捷键

  • 加粗 Ctrl + B
  • 斜体 Ctrl + I
  • 引用 Ctrl + Q
  • 插入链接 Ctrl + L
  • 插入代码 Ctrl + K
  • 插入图片 Ctrl + G
  • 提升标题 Ctrl + H
  • 有序列表 Ctrl + O
  • 无序列表 Ctrl + U
  • 横线 Ctrl + R
  • 撤销 Ctrl + Z
  • 重做 Ctrl + Y

Markdown及扩展

Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]

使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。

本编辑器支持 Markdown Extra ,  扩展了很多好用的功能。具体请参考Github.

表格

Markdown Extra 表格语法:

项目 价格 Computer $1600 Phone $12 Pipe $1

可以使用冒号来定义对齐方式:

项目 价格 数量 Computer 1600 元 5 Phone 12 元 12 Pipe 1 元 234

定义列表

Markdown Extra 定义列表语法:
项目1
项目2
定义 A
定义 B
项目3
定义 C

定义 D

定义D内容

代码块

代码块语法遵循标准markdown代码,例如:

@requires_authorizationdef somefunc(param1='', param2=0):    '''A docstring'''    if param1 > param2: # interesting        print 'Greater'    return (param2 - param1 + 1) or Noneclass SomeClass:    pass>>> message = '''interpreter... prompt'''

脚注

生成一个脚注1.

目录

[TOC]来生成目录:

  • 欢迎使用Markdown编辑器写博客
    • 部分代码示例
        • SQLContext创建表是临时的HiveContext是可以将一个表保存下来的
        • RDDRating需要从原始表中提取userIdmovieIdrating数据并把这数据切分成训练集和测试集数据64产生模型和验证模型的
          • 用String Interpolation来SQL语句中传递参数 scala的特性的
          • 打开页面Storage的属性 cache table 采用的方式in-memory Memory Deserialized
            • 将Row行对象进行转换为一个是Rating实体类的对象的
        • SparkMlib ALS进行训练模型的
    • 性能评估
    • 快捷键
    • Markdown及扩展
      • 表格
      • 定义列表
      • 代码块
      • 脚注
      • 目录
      • 数学公式
      • UML 图
    • 离线写博客
    • 浏览器兼容

数学公式

使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.

  • 行内公式,数学公式为:Γ(n)=(n1)!nN
  • 块级公式:

x=b±b24ac2a

更多LaTex语法请参考 这儿.

UML 图:

可以渲染序列图:

Created with Raphaël 2.1.0张三张三李四李四嘿,小四儿, 写博客了没?李四愣了一下,说:忙得吐血,哪有时间写。

或者流程图:

Created with Raphaël 2.1.0开始我的操作确认?结束yesno
  • 关于 序列图 语法,参考 这儿,
  • 关于 流程图 语法,参考 这儿.

离线写博客

即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。

用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。

博客发表后,本地缓存将被删除。 

用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。

注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱

浏览器兼容

  1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
  2. IE9以下不支持
  3. IE9,10,11存在以下问题
    1. 不支持离线功能
    2. IE9不支持文件导入导出
    3. IE10不支持拖拽文件导入


  1. 这里是 脚注内容. ↩
原创粉丝点击