1-Scala-Basic
Last updated
Was this helpful?
Last updated
Was this helpful?
这里的scala我选择在docker的 ubuntu 容器里面进行安装和之后学习。 所以需要先把docker里面的ubuntu环境先配置好。
拉取和进入 ubuntu 镜像 docker pull ubuntu:13.10
docker run -it ubuntu
由于从docker hub里面拉下来的ubuntu image里面基本什么包都没有, 需要自己安装一下一些常用工具, 比如 vim, curl, git apt-get install vim curl git
在ubuntu里面安装java apt-get update
安装 java jdk, 或者jre, 不过一般jdk已经包括了jre, 可以只安装jdk就好 apt-get install default-jdk
apt-get install default-jre
检查java环境是否安装成功 #: java
, #: javac
安装scala 默认安装scala 2.x 版本 apt-get install scala
测试scala #: scala
, 退出scala时用 :q
或:quit
命令
安装scala的另外一种方式是安装sbt
工具, 它是用来管理比较大的scala项目的, 可以参考官网
安装Python 和spark 由于学习scala的目的是学习大数据spark, 所以这里也一起把pyspark安装上去。
安装python apt-get update
apt-get install python3.8
apt-get install pip
安装pyspark 安装pyspark的方法有几种, 可以参考 官网. 其中一种方法是直接下载源码来跑, 步骤如下
从PySpark下载地址 下载对应的版本pyspark, 比如 spark-3.2.0-bin-hadoop3.2.tgz
解压: tar -xzvf spark-3.2.0-bin-hadoop3.2.tgz
得到 spark-3.2.0-bin-hadoop3.2 目录
在 ~/.bashrc
文件最后增加下面环境变量, 让python能够识别出pyspark的路径 export SPARK_HOME=<your-pyspark-path>
export PYTHONPATH=$(ZIPS=("$SPARK_HOME"/python/lib/*.zip); IFS=:; echo "${ZIPS[*]}"):$PYTHONPATH
4. 进入python3.8 调用pyspark检查调用情况
Scala 使用 package 关键字定义包,在Scala将代码定义到某个包中有两种方式: 第一种方法和 Java 一样,在文件的头定义包名,这种方法就后续所有代码都放在该包中 可以在一个文件中定义多个包。
Scala 里面的所有类型都是class, 不是 原生类型。 除了Byte, Int, Char, String, Long, Boolean, Float, Short, Double外, 还有 Unit, Any, Null, Nothing, AnyRef.
Unit 等同于void, 都是无值
Null: null 或空引用
Any: 所有其他类型的超类Super Class
AnyRef: 是Scala里面所有引用类型的基类BaseClass
Nothing: 是Scala如何其他类型的子类, 是最底层的类
Scala 的变量用 val
关键字定义。 Scala里面对变量的数据类型定义有下面3中方法:
对变量定义以及赋值
只对变量定义 不赋值
直接对变量赋值 不定义变量类型的话,一定要赋值
另外Scala的语句的分割符;
分号在语句最后可加可不加。
多值赋值
同时赋予相同值
同时赋予不同值, 使用tuple 这里和python不一样,一定要加括号
和Java一样, Scala有public, private, protected 关键词对函数, 变量, 类进行修饰。 使用方法: private [x] <被修饰对象>
, 这里的x指代某个所属的包、类或单例对象。如果写成private[x],读作"这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外,对其它所有类都是private。
例子
类 Navigator 被标记为 private[bobsrockets] 就是说这个类对包含在 bobsrockets 包里的所有的类和对象可见。
Scala的运算符和C, python一样, 支持 !=
,==
, >=
, <=
, &
, $$
, >>
, <<
等。 另外scala也支持自加, 自乘等表示式, 如 a-=1
, b*=3
等
Scala 的 if, else, for, while, do..while
等和C一样。但是Scala 不支持 break
, continue
的操作。 使用break时要用到类。 比如调用 Breaks 类的break
Scala 中使用 val
语句可以定义函数,def
语句定义方法
Scala 类的方法定义
方法声明
例子
Scala 这里用的 val f = (x: Int) => x + 3
中,f
为函数名, 后面接输入的参数列表和对应的类型, 再加 箭头=>
, 最后是公式。 这个有点像python的lambda x:x+3
的匿名函数写法
https://sparkbyexamples.com/spark/different-ways-to-create-a-spark-dataframe/