banner

写给Python程序员的Scala入门教程

作者: afenxi来源: afenxi时间:2017-05-04 14:56:50

摘要:Spark对Python的支持还是挺好的,但毕竟它还是使用Scala开发的,且现有的API并没有100%覆盖Python。

随着业务和数据的需要,我们引入了Spark。Spark对Python的支持还是挺好的,但毕竟它还是使用Scala开发的,且现有的API并没有100%覆盖Python。所以就有了这篇文章,让Python程序员可以接触Scala这门更高(级)、更快(速)、更强(大)的(奥运精神)语言。

Scala兼具Python样的开发效率,但又有Java般的执行性能,真是一不可多得的神器!(当然,鱼和熊不可兼得,Scala的入门曲线相比Python是要那么陡峭一丢丢)

安装

一般Linux系统都自带Python环境,但Scala是没有的。这需要我们手动安装,还需要安装Java环境。Java环境的安装这里就不介绍了,网上很多。说说Scala的安装吧。下载地址在http://scala-lang.org/download/2.11.7.html。

1 2 3 4 5 6 7 8 9

wget -c http://downloads.typesafe.com/scala/2.11.7/scala-2.11.7.tgz tar zxf scala-2.11.7 cd scala-2.11.7 ./bin/scala Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_60). Type in expressions to have them evaluated. Type :help for more information. scala>

我们可以看到终端出现了scala>提示符,这个就像Python的REPL一样,Scala也拥有一个REPL。我们可以在这里很方便的编写一些代码,测试一些想法。

对于Scala常用的IDE(集成开发环境),推荐使用IDEA for scala plugins和scala-ide。

Scala的强大,除了它自身对多核编程更好的支持、函数式特性及一些基于Scala的第3方库和框架(如:Akka、Playframework、Spark、Kafka……),还在于它可以无缝与Java结合。所有为Java开发的库、框架都可以自然的融入Scala环境。当然,Scala也可以很方便的Java环境集成,比如:Spring。若你需要第3方库的支持,可以使用Maven、Gradle、Sbt等编译环境来引入。

Scala是一个面向对象的函数式特性编程语言,它继承了Java的面向对特性,同时又从Haskell那里吸收了很多函数式特性并做了增强。

Hello, world.

通常情况下,Java系的程序都需要有一个main方法来执行。并需要放入一个Web container容器,或打成一个jar包来执行。但是Scala不一样,它除了支持传统的Java方式,它也可以像Python一样把代码保存到一个脚本文件里(.scala)执行,就像一个Shell脚本一样。

1 2 3 4 5 6 7 8

yangjing-mac-air:scala-2.11.7 jingyang$ cat test.scala #!/bin/sh exec scala "$0" "$@" !# // Say hello to the first argument println("Hello, "+ args(0) +"!") yangjing-mac-air:scala-2.11.7 jingyang$ ./test.scala 杨景 Hello, 杨景!

(注:需要把$SCALA_HOME/bin加入系统环境变量才能直接执行scala命令)

可以看到,使用Scala,你除了像传统的Java程序一样把它做为一个“服务”的方式来启动,你也可以把它像Python一样做为一个“脚本”来启动。

(注意:Scala不像Python一样通过代码缩进来表示代码的层次关系,而是和通常的语言一样使用 calc: (n1: Int, n2: Int)(Int, Int) scala> val (add, sub) = calc(5, 1) add: Int = 6 sub: Int = 5

这里定义了一个函数:calc,它有两个参数:n1和n2,其类型为:Int。cala函数的返回值类型是一个有两个元素的元组,在Scala中可以简写为:(Int, Int)。在Scala中,代码段的最后一句将做为函数返回值,所以这里不需要显示的写return关键字。

而val (add, sub) = calc(5, 1)一句,是Scala中的抽取功能。它直接把calc函数返回的一个Tuple2值赋给了add他sub两个变量。

总结

本篇文章简单的介绍了Scala的语言特性,本文并不只限于Python程序员,任何有编程经验的程序员都可以看。现在你应该对Scala有了一个基础的认识,并可以写一些简单的代码了。之后会分享一些《Scala实战(系列)》,介绍更函数式的写法及与实际工程中结合的例子。

来源:羊八井花园  作者:杨景

链接:写给Python程序员的Scala入门教程

banner
看过还想看
可能还想看
最新文章
Yonghong Z-Suite一站式大数据分析平台 —— 以卓越的数据技术为客户创造价值,实现客户成功。