一、关于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