zoukankan      html  css  js  c++  java
  • scala新人佑门

    scala语言
    1. val和var
    val和var当前区别在于前者只能被赋值一次,就像java中的final,但是后者则可以随意覆盖;
    2. Unit
    Unit返回代表空返回,类似于vo
    3. 类型推测
    一时手抖,写下:
    val spanTime = endTime - spanTime
    报错:recursive value spanTime needs type
    这是因为编译器无法推测出变量(spanTime)类型。
    其实应该是:
    val spanTime = endTime - startTime
     
    与之类似的,变量的初始化:
    var writer = null
    var write = writerMap.apply(Bytes.toString(kv._1.family))
    这种变量初始化是不可以被接受的(第二行将会报错),因为在声明writer的时候并没有带上类型信息;这时候,赋值就无法判断是否正确
    var writer : StoreFile.Writer = null
    声明了类型,这种处理模式是可以接受的。
     
    4 toList数据丢失
    var data = file.getLines().map(line => {new Dto("1", line)})
    var lst = data.toList
    之后为什么会成为lst.size=0???可见,集合转List是不成功,虽然不报错,但是元素都丢失了。
     
    5. 关于spark的DataFrame
    1. select 字段的as写法,不行,需要通过withColumnReplaceName函数进行字段重命名;
    2. 主表和join表一调歌就搞定了?如果不指定selectExpr默认只是会获取主表的字段,join表的字段无法获取,所以主表是啥很重要,或者就是每次都显式指定要select出来的字段。
    3. agg的字段也是在selectExpr中体现出来,不需要前缀,直接上名称即可。
    4. 对于日期的比如通过DateTimeTool.sysDate,切记放入到select语句的时候,前后要添加上”‘“
    5. 对于主表和从表中共有的同名的join字段,在select,group的时候只能用主表的
    6. 快速写法:表上来就先as别名,别名和表(变量)名一致;
    7 异常:Schema for type com.cmiot.bulkload.Dto is not supported
    类型(Dto)是case class才可以
     
    7. scala的脚手架
    Case Class,定义之后,将会自动生成伴侣方法:
    copy,equals,apply等;多用于VO等实体类。
    copy函数实现的深度拷贝,将会对于属性赋值一个新的实例返回到新类中。
    Seq:定义了一个序列,可以重复;
    Set:定义了一个集合,元素没有顺序,不可以重复;
    7. spark版本问题
    java.lang.NoSuchMethodError: scala.Predef$.$conforms()Lscala/Predef$$less$colon$less;
      网上查了一下,发现是因为用户代码中scala的版本和调用接口的spark编译的scala版本不一致造成。因为编译的时候spark是打包一起的我一直以为是jar中scala的版本和用户代码不一致(intelliJ的代码是2.12.3,spark是2.11的)
      但是怎么调都没有进展;后来发现原来是因为用户代码在执行的时候其实并不走jar包里面的spark,而是走的worknode节点运行的spark版本;worknode上面部署的是cloudera的spark,2.10.5:1.6.0;后来修改一下问题解决。
     
    8. implicit

    如果是用在参数上面,代表参数是可选参数;放在参数列表的最后面;单独采用()包裹起来;
    如果是用在函数上面,代表着如果在当前类中调用某个没有被定义的函数,将会从其他的对象里面找到被implicit修饰的函数,进入到该类的函数中进行执行;

     
     
  • 相关阅读:
    读写锁
    MySQL事务处理和锁机制
    SQL注入攻击
    数据库三范式
    Slave延迟很大的优化方法总结(MySQL优化)
    MySQL主从复制的原理及配置
    消息总线的应用场景
    Java NIO通信框架在电信领域的实践
    逃逸分析
    BOM
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/7510044.html
Copyright © 2011-2022 走看看