Spark
来源:互联网 发布:端口号和其他软件重复 编辑:程序博客网 时间:2024/06/08 13:49
1. spark出现task不能序列化错误的解决方法 org.apache.spark.SparkException: Task not serializable
出现“task not serializable"这个错误,一般是因为在map、filter等的参数使用了外部的变量,但是这个变量不能序列化。
解决这个问题最常用的方法有:
- 如果可以,将依赖的变量放到map、filter等的参数内部定义。这样就可以使用不支持序列化的类;
- 如果可以,将依赖的变量独立放到一个小的class中,让这个class支持序列化;这样做可以减少网络传输量,提高效率;
- 如果可以,将被依赖的类中不能序列化的部分使用transient关键字修饰,告诉编译器它不需要序列化。将引用的类做成可序列化的。
2. SparkStreaming的Broadcast
object IPRuels { // 将ip地址转换为整数 def ip2num(ip : String) : Long = { val fragments = ip.split("\\.") var ipNum = 0L for (i <- 0 until fragments.length) { // 与运算 ipNum = fragments(i).toLong | ipNum << 8L } ipNum } @volatile private var instance : Broadcast[Array[(Long, Long, String)]] = null def getInstance(sc: SparkContext): Broadcast[Array[(Long, Long, String)]] = { if (instance == null) { synchronized { if (instance == null) { val wordBlacklist = sc.textFile("/home/peerslee/spark_data/ip.txt").map(line => // map RDD 的Transformation 操作,用 f 处理一个Rdd 的所有元素,将结果输出到另一个Rdd { val fields = line.trim().split("\t") val start_num = ip2num(fields(0).trim()) val end_num = ip2num(fields(1).trim()) val province = fields(2).trim() (start_num, end_num, province) }).collect() instance = sc.broadcast(wordBlacklist) } } } instance }}
def IPLocation(dStream: DStream[String], sc : SparkContext, mongoSQL: MongoSQL): Unit = { val ipRulesBroadcast = IPRuels.getInstance(sc) val result = dStream.map(line => { ipPat.findFirstIn(line.toString()).mkString("")}) .map(ip => { var info : Any = None if(!ip.isEmpty) { val ipNum = ip2num(ip) val index = binarySearch(ipRulesBroadcast.value, ipNum) info = ipRulesBroadcast.value(index) } (info, 1L)}) .reduceByKey(_+_) result.foreachRDD((rdd : RDD[(Any, Long)]) => { // 将total 写在map,for里 var total = 1L try { total = rdd.reduce((x, y) => ("t", x._2 + y._2))._2 } catch { case ex : UnsupportedOperationException => { total = 1 } } val rowRdd = rdd.map(x => { val r = x._2.toFloat/total (x._1, r) }).map(line => Row(line._1.toString, line._2.toString)) val schemaStr = "loc,rate" mongoSQL.put(schemaStr, rowRdd, "IP_rate_2") }) }
3. 保存3个好博客
- spark流数据处理:Spark Streaming的使用
- DStreams上的转换操作
- Scala 集合数据操作示例
项目
0 0
- spark
- spark
- Spark
- spark
- Spark
- spark
- Spark
- Spark
- spark
- Spark
- SPARK
- Spark
- Spark
- Spark
- spark
- spark
- Spark
- spark
- MySQL启动提示High Severity Error解决方案
- MacOS 下安装 Homebrew
- HTML5学习笔记 —— SEO入门
- Ubuntu安装Zabbix3.2
- Junior Unity3d Engineer | 初级Unity3d工程师
- Spark
- 【剑指offer】有序二维数组中的查找
- Java jxl导入excel文件,导入的数字、身份证号码、手机号变成了科学计数法,解决方案
- ios 事件传递和响应的总结
- Backend Engineer | 后端工程师
- AndroidStudio中Module Library中使用butterknife踩坑
- 宏变量的打印
- java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(ja
- Data Manager | 游戏版本管理工程师