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 表格语法:
可以使用冒号来定义对齐方式:
定义列表
- 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)=(n−1)!∀n∈N 。 - 块级公式:
更多LaTex语法请参考 这儿.
UML 图:
可以渲染序列图:
或者流程图:
- 关于 序列图 语法,参考 这儿,
- 关于 流程图 语法,参考 这儿.
离线写博客
即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。
用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。
博客发表后,本地缓存将被删除。
用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。
注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱。
浏览器兼容
- 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
- IE9以下不支持
- IE9,10,11存在以下问题
- 不支持离线功能
- IE9不支持文件导入导出
- IE10不支持拖拽文件导入
- 这里是 脚注 的 内容. ↩
- spark
- spark
- Spark
- spark
- Spark
- spark
- Spark
- Spark
- spark
- Spark
- SPARK
- Spark
- Spark
- Spark
- spark
- spark
- Spark
- spark
- Again Twenty Five!
- vtk光照、颜色、相机、坐标系统及空间变换
- "ase_exploration"----一种开源的主动SLAM系统介绍
- 2017
- Spring-AOP讲解-附带实例
- Spark
- java多态
- java基础之递归调用
- Django 安装mysqlclient 或者其他模块。
- 又是一年1024程序员节
- Web Audio接收文件流导致无法快进的一个解决思路
- 深度学习之基础模型-mobileNet
- Java:按钮布局演示
- 10.24