Scala, Spark:一些小坑
来源:互联网 发布:淘宝买账号的靠谱吗 编辑:程序博客网 时间:2024/05/29 18:29
Scala, Spark:一些小坑
在开发Spark Job的过程中,遇到了一些很低级的小坑,不是自己不知道这个知识点,只是 没有过于专注。现把这些错误记录下来,以后尽量少范这种错误,以表警示。
scala: map.get
Scala有一个Option类,他有2个子类,Some和None,其设计的上的就是为了减少Java中 null 使用的次数。Scala的mutable.HashMap 的 get方法,返回就是Option[T]类型的子类。如果key存在,则返回Some(值),如果不存在返回:None。
之前一直开发Java程序,直接使用.get方法返回就是想要的值,但在Scala中,这点是比较容易出错的。如果get的值需要 和a,b,c 累加 成字符串,值的结果就是 a,b,c,Some(value),这样就会导致程序错误,其实我们想要的值是: a,b,c,value
def main(args: Array[String]): Unit = { var map = mutable.HashMap[String, String]() map.+=(("a" -> "1")) println(map.get("a")) println(map.get("b"))}结果:Some(1)None
spark: map,flatMap等 算子最后返回值
Scala语言把函数的最后一句当做返回值, 就是不强制使用return语句。这点上,也容易范一些小错误,比如我下面的程序。愿意是想返回log对象,但是错误的理解为 “log.att = XXX ” 之后 还可以返回Log对象,其实返回的是Unit,程序运行没有错误,但结果总是不对。
sparkContext.textFile(inputPath).flatMap(x => { Log.readFromString(x)}).map(log => { val atts: Array[String] = log.att.split(",") val sb: StringBuilder = new StringBuilder for (att <- atts) { if (attrComMapBroad.value.contains(att)) { sb.append(attrComMapBroad.value.get(att).get) } else { sb.append(att) } sb.append(",") } log.att = sb.substring(0, sb.length - 1) log // 此句最容易忘记,把上一句,log.att = 当做返回值,返回的结果是unit类型的}).filter(_.isKept).saveAsTextFile(outputPath, classOf[GzipCodec])
阅读全文
0 0
- Scala, Spark:一些小坑
- spark:--一些简单的scala语句--1
- spark:--一些简单的scala语句--2
- spark:--一些简单的scala语句--3
- spark:--一些简单的scala语句--4
- spark:--一些简单的scala语句--5
- spark:--一些简单的scala语句--6
- 学习scala和spark的一些内容
- spark的一些小项目
- 初用scala的一些小技巧
- spark,scala
- spark小应用一:wordcount,按词频降序(SCALA)
- spark小应用二:分组分数排序(SCALA)
- Spark Web的一些小知识
- scala 开发spark程序
- scala for spark
- scala spark开发模式
- spark scala wordcout
- angularJs的简单理解和使用(登录)
- Java程序的初始化顺序
- ReactNative接入支付宝支付
- 前端之js功能代码
- 代理与反向代理
- Scala, Spark:一些小坑
- mysql:索引与优化
- POJ 1386 Play on Words(欧拉路经典题)
- python 链接rabbitmq
- Activity、Window、View、Surface[3]onCreate()、onResume()
- 1228:大数阶乘
- 火狐护眼模式,让眼睛舒服起来,IT必备
- JAR包的JDK版本查看与设置
- 升级php版本