spark学习2

 

 

数据通过解析后被存放成case class类型,如果想要提取处理,就需要将数据转换成df toDF()

而一旦转换成DF 对应的表头字段和case class中的相对应,df的一些有趣操作,

 ratingsData.toDF().filter($"rating" > 4).select("product").rdd.map((_, 1)).reduceByKey(_ + _).sortBy(_._2, false).map(_._1).take(100),其实我是想求一个聚合函数,一时竟想不起来该怎么做了,索性转成rdd变成求wordcount

其实可以这么解决 通过注册成临时表 然后通过sql语句查询 ,df只有注册成临时表才能像sql那样查询,

spark.sql("select product,count(*) from A group by product ")简单的分组聚合累加

 或者直接通过 df提供的方法ratingsData.toDF().filter($"rating" > 4).groupBy("product").count().createTempView("A")

groupBy("product".count())免去了注册临时表的麻烦 createTempView

在此需要提示一下,临时表分为好几种,如果是global 的需要在前面加上global_temp.xxx否则会报找不到此表

       val predictResultOfTestSet = recomModel.predict(testSetOfRatingData.map {
         case Rating(user, product, rating) => (user, product)
       })
    
       val formatResultOfTestSet = testSetOfRatingData.map {
         case Rating(user, product, rating) => ((user, product), rating)
       }
scala的强大之处case class模式匹配 如果对应与这样则转换成指定的格式 testSetOfRatingData.map {
         case Rating(user, product, rating) => (user, product) 其实不需要这么麻烦,

map(x=>(x.user,x.product))即可

 

 

rdd的cache 和persist   

从源码看cache是直接调用的persist,cache的默认存储级别为memory,而persist可以通过传入存储级别改变

spark-env调优 

spark_worker_cores 总共的核数允许spark ,默认全部

spark_worker_momoey 默认总内存减去1G

master_port 7077 webui 8080

 

spark中的一些概念:Aplication应用就是一个spark-submit提交的一个任务被称之为Application应用

stage划分 宽依赖 窄依赖 如果父rdd进入一个窄依赖否则宽依赖

用户提交的应用程序代码在spark中运行起来就是一个driver,

spark on yarn有两种方式 cluster client cluster一般用于生产环境,client用于交互测试。主要区别是 ,client的driver运行在客户端进程中,后者的driver运行在nodemanager的applicationmaster中,driver负责分发作业的,由于client模式driver在客户端上,客户端可能与executor,不再同一局域网中,通信会很慢

提交作业时yarn会将spark jars分发到yarn的container中,这十分耗费资源,故而我们可以将spark jars放在一个yarn可以访问到的目录中,具体做法如下:

vi spark-default.cong  添加

 spark.yarn.jars  hdfs://ip:8021/somepath/*

保存生效,并将所有的spark jars上传至hdfs://ip:9000/somepath/即可。
 

spark对于同时运行的作业数目有一定的限制,该限制由参数"spark.port.maxRetries"决定,该参数默认值为16,表明同一时间运行的作业最多为17个(不是16个哦),生产上16肯定太小,我们可以更改这一数字,具体做法如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值