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修饰的函数,进入到该类的函数中进行执行;

 
 

scala新人佑门的更多相关文章

  1. Scala确实是门好语言

    看完了一本Scala的书,整体感觉很不错,语法很简洁,对用惯了脚本语言的人来说语言特性稍微有点复杂,不过对Java用户应该没有压力. 最牛叉的有两点:并发.面向领域编程    

  2. scala函数式编程(二) scala基础语法介绍

    上次我们介绍了函数式编程的好处,并使用scala写了一个小小的例子帮助大家理解,从这里开始我将真正开始介绍scala编程的一些内容. 这里会先重点介绍scala的一些语法.当然,这里是假设你有一些ja ...

  3. Hello,Akka

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://www.blogbus.com/dreamhead-logs/235916459.html 只要稍微了解过一些Scala, ...

  4. Scala HandBook

    目录[-] 1.   Scala有多cool 1.1.     速度! 1.2.     易用的数据结构 1.3.     OOP+FP 1.4.     动态+静态 1.5.     DSL 1.6 ...

  5. Effective Scala

    Effective Scala Marius Eriksen, Twitter Inc.marius@twitter.com (@marius)[translated by hongjiang(@ho ...

  6. 对想进入Unity开发新人的一些建议

    提前声明:本文只是写给那些非职业游戏开发人士,只面向那些在校本科生,或已就业但无unity背景的同学们,当然是面对程序员方向的.本人刚工作也没多久,资历尚浅,之前在网上有一位同学让我谈谈一些想法,所以 ...

  7. 使用SBT构建Scala应用(转自git)

    # 使用SBT构建Scala应用 ## SBT简介 SBT是Simple Build Tool的简称,如果读者使用过Maven,那么可以简单将SBT看做是Scala世界的Maven,虽然二者各有优劣, ...

  8. Scala的Actor模式 & Akka框架

    今天学Spark的时候,看到Scala的actor模式是一个加分点.所以搜了一下,看了.主要参考下面两篇文章,还没有实验,有些地方领会的不深刻: http://nxlhero.blog.51cto.c ...

  9. 【原】SBT构建Scala应用

    [转帖] 原文地址:https://github.com/CSUG/real_world_scala/blob/master/02_sbt.markdown 尊重版权,尊重他人劳动成果,转帖请注明原文 ...

随机推荐

  1. 【转】2018年EI收录中文期刊目录

    序号 中文刊名 收录情况 1 声学学报 保持收录 2 航空学报 保持收录 3 兵工学报 保持收录 4 自动化学报 保持收录 5 电子学报 保持收录 6 太阳能学报 保持收录 7 测绘学报 保持收录 8 ...

  2. Nginx性能测试

    环境:Centos 7.0  Nginx 1.6.2 测试工具:siege 3.0.7 配置1: I3-3110M 4G 测试1(100用户,1000请求): 平均响应:0.06s 并发数:59.19 ...

  3. python实现接口测试到unittest框架集成

    接口测试是面试测试岗位基本都会问到的问题,但是对于一些刚做测试的小伙伴可能并不是很熟悉,也有可能了解接口测试,但是完全不知道接口自动化怎么做.下面我们大概介绍一下. 首先我们需要知道接口自动化测试的目 ...

  4. VxWorks启动过程具体解释(下)

    上一节主要是从映像的分类和各种映像的大致载入流程上看VxWorks的启动过程,这一节让我们从函数级看一下VxWorks的启动过程: 1. Boot Image + Loadable Images: 以 ...

  5. MongoDB学习笔记<六>

    继续mongoDB的学习 --索引具体解释 --索引管理 --空间索引 1.创建简单索引 (1)先准备20万条数据 for(var i = 0;i< 200000;i++){ db.books. ...

  6. 【BZOJ2789】[Poi2012]Letters 树状数组

    [BZOJ2789][Poi2012]Letters Description 给出两个长度相同且由大写英文字母组成的字符串A.B,保证A和B中每种字母出现的次数相同. 现在每次可以交换A中相邻两个字符 ...

  7. 【BZOJ4408】[Fjoi 2016]神秘数 主席树神题

    [BZOJ4408][Fjoi 2016]神秘数 Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13},1 = 12 = 1 ...

  8. 九度OJ 1172:哈夫曼树 (贪心)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6701 解决:2954 题目描述: 哈夫曼树,第一行输入一个数n,表示叶结点的个数.需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结 ...

  9. Linux内核的编译安装

    前言 Linux内核是Linux操作2347系统的核心,也是整个Linux功能体现的核心,就如同发动机在汽车中的重要性.内核主要功能包括进程管理.内存管理.文件管理.设备管理.网络管理等.Linux内 ...

  10. Makefile注意点总结

    1 "="和":=" "="号赋值时,如果右边的值里面有未展开的变量,要等到整个Makefile的变量处理完之后,再展开,也就是说,如果该未 ...