spark 序列化错误 集群提交时_Spark的零散笔记(二)

1. 减少client模式下的日志输出

import org.apache.log4j.{ Level, Logger }

Logger.getLogger("org").setLevel(Level.ERROR)//或者WARN

2. 判断字符串是否为整数或小数

和spark没关系,是个scala语法问题。

实际项目中涉及过滤数据质量的问题,因此综合网上看到的例子整理出一个能同时适配整数和小数的方法。

var pattern = """^[0-9]+([.]{1}[0-9]+){0,1}""".r

def isNumber(s: String) = {

s match {

case null => false

case this.pattern(_*) => true

case _ => false

}

}

3. spark传递对象的序列化的问题

原因是写了一个读取配置文件的config类,在构造函数中读取文件,然后赋值。报错:

object not serializable

原因:spark任务是由driver分配给executor的。在driver中建立的class(基本上就是各种rdd算子之外定义的class)必须通过序列化方式下发,否则就要回避这种用法:

//定义

class config extends java.io.Serializable {

def this(path: String) {

this() //调用主构造函数

//自定义构造方法

}

}

//使用

val taskconf = new config(args(0))

其他的方法(不建议用,参见后续分析):

使用object或case object,此时不能定义构造函数,但是可以自己写一个load函数。使用的时候也不用new:

//定义

object config {

def load(path: String) {

}

}

//使用

val taskconf = config

taskconf.load(args(0))

//或者直接用config

相当于实现了一个静态类,而且感觉作为一个只读的配置类,这样搞就够了。

ps. 经过后续测试,object对象往execu

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值