Scala入门之三:Scala类
转载
Scala是一门面向对象的语言,因此它拥有很多关于“类”的描述。本文简单介绍了Scala类的一些特点。
本文源自Michel Schinz和Philipp Haller所写的A Scala Tutorial for Java programmers,由Bearice成中文。第一篇为Scala简单做了一下入门,文。第二篇描述Scala对象。在这一部分中,将对Scala类进行一些介绍。
**5 Scala类 **
正如我们所见,Scala是一门面向对象的语言,因此它拥有很多关于“类”的描述 。Scala类使用和Java类似的语法进行定义。但是一个重要的不同点在于Scala中的类可以拥有参数,这样就可以得出我们下面关于对复数类(Complex)的定义:
class Complex(real: Double, imaginary: Double) { def re() = real def im() = imaginary}
我们的复数类(Complex)接受两个参数:实部和虚部。这些参数必须在实例化时进行传递,就像这样:new Comple ...
Scala入门之二:万物皆对象,介绍Scala对象
转载
本文源自Michel Schinz和Philipp Haller所写的A Scala Tutorial for Java programmers,由Bearice成中文。之前一篇为Scala简单做了一下入门,这一篇描述Scala对象。在Scala中,一切都是对象,所以数字和函数都是Scala对象。
4 Scala:万物皆对象
Scala作为一个纯面向对象的语言,于是在Scala中万物皆对象,包括数字和函数。在这方面,Scala于Java存在很大不同:Java区分原生类型(比如boolean和int)和引用类型,并且不能把函数当初变量操纵。
4.1 数字和对象
由于数字本身就是对象,所以他们也有方法。事实上我们平时使用的算数表达式(如下例)
> 1 + 2 * 3 / x
是由方法调用组成的。它等效于下面的表达式,我们在上一节见过这个描述。
> (1).+(((2).*(3))./(x))
这也意味着 +,-,*,/ 在Scala中也是有效的名称。
在第二个表达式中的这些括号是必须的,因为Scala的分词器使用最长规则来进行分词。所以他会把下面的表达式 ...
Scala入门之五:Trait
转载
本文介绍了Scala的Trait。除了从父类集成代码外,Scala中的类还允许从一个或者多个traits中导入代码。 对于Java程序员来说理解traits的最好方法就是把他们当作可以包含代码的接口。
本文源自Michel Schinz和Philipp Haller所写的A Scala Tutorial for Java programmers,由Bearice成中文。第一篇为Scala简单做了一下入门,第二篇描述Scala对象,第三篇对Scala类做了一些介绍。第四篇介绍了Scala的模式匹配。下面这部分介绍Scala的Trait,直译过来就是特性/特征的意思。
7 Scala Trait
除了从父类集成代码外,Scala中的类还允许从一个或者多个traits中导入代码。
对于Java程序员来说理解traits的最好方法就是把他们当作可以包含代码的接口(interface)。在Scala中,当一个类继承一个trait时,它就实现了这个trait的接口,同时还从这个trait中继承了所有的代码。
让我们通过一个典型的实例来看看这种trait机制是如何发挥作用的:排序 ...
Scala入门之六:泛型
转载
本文介绍了Scala的Trait。除了从父类集成代码外,Scala中的类还允许从一个或者多个traits中导入代码。 对于Java程序员来说理解traits的最好方法就是把他们当作可以包含代码的接口。
本文源自Michel Schinz和Philipp Haller所写的A Scala Tutorial for Java programmers,由Bearice成中文。第一篇为Scala简单做了一下入门,第二篇描述Scala对象,第三篇对Scala类做了一些介绍。第四篇介绍了Scala的模式匹配,第五篇则介绍Scala的Trait。下面是最后一部分,讲述Scala的泛型。Scala的泛型是Scala最大的优势之一。
8 Scala的泛型
我们在这文章将要学习Scala的最后一个特性是泛型。Java程序员们可能最近才知道这个东西,因为这个特性是在Java1.5中才被加入的。
泛型是一种可以让你使用类型参数的设施。例如当一个程序员正在实现一个链表时,将不得不面对诸如如何决定链表中节点保存数据的类型之类的问题。正由于这是一个链表,所以往往会在不同的环境中使用,因此,我们不能草率的决 ...
Scala入门之四:模式匹配和条件类
本文介绍了Scala的模式匹配。模式匹配的基本思想就是试图对一个值进行多种模式的匹配,并且在匹配的同时将匹配值拆分成若干子项,最后对匹配值与其子项执行某些代码。
本文源自Michel Schinz和Philipp Haller所写的A Scala Tutorial for Java programmers,由Bearice成中文。第一篇为Scala简单做了一下入门,第二篇描述Scala对象,第三篇对Scala类做了一些介绍。这一篇将介绍Scala中的一个重要特性:Scala的模式匹配。
6 Scala的模式匹配和条件类
树是在程序中常用的一个数据结构。例如编译器和解析器常常吧程序表示为树;XML文档结构也是树状的;还有一些集合是基于树的,例如红黑树。
接下来我们将通过一个计算器程序来研究树在Scala中是如何表示和操纵的。这个程序的目标是处理一些由整数常量、变量和加号组成的简单的算数表达式,例如1 + 2 和 (x + x ) + (7 + y )。
我们首先要决定如何表示这些表达式。最自然的方法就是树了,树的节点表示操作符(在这里只有加法),而树的叶节点表示值(这里表示常数和变量 ...
Spark实践笔记1:环境准备
ubuntu server镜像,ParallelsDesktop下快速安装。采用12.04 server 32位版本,手动安装,使用英文语言,时区选中国,预装服务选了 openssh
修改root用户密码,启用root账户:sudo passwd root 。此后使用root用户操作。
设置静态IP:vim /etc/network/interfaces
root@ubuntu1:~# more /etc/network/interfaces# This file describes the network interfaces available on your system# and how to activate them. For more information, see interfaces(5).# The loopback network interfaceauto loiface lo inet loopback# The primary network interfaceauto eth0#iface eth0 inet d ...
Spark实践笔记2:Hadoop安装
Hadoop下载:我选择了hadoop2.7.0
将hadoop-2.7.0.tar 上传到ubuntu1里去,并将hadoop解压到/usr/local/hadoop
mkdir /usr/local/hadooptar xvf hadoop-2.7.0.tar -C /usr/local/hadoop/
修改 ~/.bashrc 文件,增加环境变量:
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.0export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:$PATH
导入配置使其生效:source ~/.bashrc
创建必要的目录
mkdir ${HADOOP_HOME}/dfsmkdir ${HADOOP_HOME}/tmpmkdir ${HADOOP_HOME}/dfs/datamkdir ${HADOOP_HOME& ...
Spark实践笔记3:Spark集群搭建
scala的安装
下载安装包:我选择2.11.6版本
上传到ubuntu1中并解压,配置环境变量,增加SCALA_HOME,并在PATH里增加对应BIN
tar xvf scala-2.11.6.tar -C /usr/localcd /usr/localmv scala-2.11.6 scalavim ~/.bashrcexport SCALA_HOME=/usr/local/scalapath里增加 $ {SCALA_HOME} /binsource ~/.bashrc
把scala拷贝到其他两台机器,并配置环境变量
scp -r scala ubuntu2:/usr/localscp -r scala ubuntu3:/usr/local
验证scala安装成功
scala -version
spark安装
下载安装包:我选择1.3.1版本
上传到ubuntu1中并解压,配置环境变量,增加SPARK_HOME,并在PATH里增加对应BIN。使用source命令使配置生效
tar xzvf spark-1.3.1-bin-hadoo ...
Spark实践笔记4:用Spark-shell做交互式分析
首先在MASTER机器上启动hadoop及spark;把位于${SPARK_HOME}下的README.md文件put到HDFS/data目录下;启动spark-shell,启动spark-shell时需要指定MASTER机器,否则执行后续命令会报错:${SPARK_HOME}/bin/spark-shell –master spark://ubuntu1:7077scala> val textFile = sc.textFile(“/data/README.md”)textFile.count()textFile.first()能看到,程序正常执行,而且执行第二个命令first的速度比第一个命令count要快很多。通过Spark-shell的web能看到任务信息。
个人理解:val定义了一个RDD(弹性分布式数据集)textFile。RDD拥有自己的一些actions,如count、first、take、countByKey、reduce等,可以直接调用。RDD还有一种操作类型叫 transfo ...
Spring Boot过滤返回的数据
考虑这样的场景:对于同一个Model类,在不同的api中需要返回不同的字段。该如何优雅的实现呢?
解决方案采用JsonView,根据定义自动实现字段的过滤。
具体方法
创建一个view类,声明一个summary接口,summary接口继承summary用来演示扩展
public class View { public interface Summary {} public interface Summary2 extends Summary{}}
在model上使用注解,定义view中需要呈现的列
public class Article { @JsonView(View.Summary.class) private String id; @JsonView(View.Summary2.class) private String title; private String content; // 省略getter setter}
通常在RESTfu ...
