关于Spark Context创建的代码优化和自定义隐式转换及使用

一、关于SparkContext创建的封装

封装sparkContext创建实例,使代码浏览起来更高大上

1、在resource目录下创建application.conf的配置文件

设置一个程序运行时的开关,控制成是否是本地运行还是集群运行模式(cluster: 		 集群|local:本 机)            
	 dolphin.common.power=local

2、使用枚举类封装传入的两个开关值

object DolphinEnum extends Enumeration{
 /*封装运行模式的两个值 */
 type DolphinEnum = Value
val local, cluster = Value  }

3、封装实例

object DolphinApp {
 /** * 封装SparkContext创建实例 */
  //Map.empty  默认时空值
  def createSparkContext(appName: String, params: Map[String, String] = Map.empty) 	  = {
 val sparkConf = new SparkConf()
  sparkConf.setAppName(appName)
	if (DolphinConfig.power.equals(local.toString)) { // 运行模式的开关
   sparkConf.setMaster("local[*]") }
  // 遍历Map并 封装用户传递进来的参数
 params.foreach { case (key, value) => sparkConf.set(key, value) }
 new SparkContext(sparkConf)
 }}

4、创建SparkContext ,在类中直接调用即可

val sc: SparkContext = DolphinApp.createSparkContext("doit.kpi.ProAndCityDistribution")

二、Spark定义自己的隐式转换,将需要转换的内容封装好直接调用

## 隐式转换的本质就相当于Java中的装饰者模式,将相应的类型通过装饰后使用,使用隐式转换将类型转换封装成自己的方法
也就是构建一把钥匙,导入隐式转换(给一把钥匙)后直接调用相应的方法即可
	class RichString(val str:String) {
//定义转换方法,如果有异常给默认值0
def toIntPlus = {
  try {
    str.toInt
 } catch {
	  case _:Exception =>0
  }  }
 def toDoublePlus = try {
   str.toDouble
 } catch {
case _: Exception => 0d
}}
object RichString{
 /**
* 将String类型隐式转换成RichString*/
  implicit def str2RichString(str: String)  = new RichString(str)}

使用:

  //导入隐式转换  给一把钥匙 import doit.logbean.RichString._
	直接调用即可: arr(1).toIntPlus
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值