![fbd480a58210340ba0de19aeccd26961.png](https://i-blog.csdnimg.cn/blog_migrate/61cbaa4ce6b8c6372a82871162503822.jpeg)
spark是一个开源集群运算框架,最初是由加州大学柏克莱分校AMPLab所开发。相对于Hadoop的MapReduce会在运行完工作后将中介数据存放到磁盘中,Spark使用了存储器内运算技术,能在数据尚未写入硬盘时即在存储器内分析运算。
两种在命令行里的打开方式
1 、输入spark-shell 此时可以用scala输入
2 、输入 pyspark 此时可以用notebook打开
Scala
1 scala语言
(1)复制大量代码
:paste ,cont+D 结束该模式
scala后面的分号可选,多条语句的时候需要添加
(2)数据类型,首字母需大写
Byte,Short,Double,Float,Int,Lont,Char,Null,Any,AnyRef
(3) 数据的两种类型,val常量,var变量 val name:type=初始值,可显
val x=1+1
val x:Int=1+1
var x:Int=1+1
声明数组:var z:Array[String]=new Array[String](3) 或者
z:Array[String]=Array[String](null,null,null)
z(0)="baidu";z(1)="google";z(2)="biying"
数据的基本操作
str.length
str.head查看第一个元素
sre.tai查看除第一个外其他的元素
str.isEmpty 是否为空
str.contains(x) 判断是否包含x
(4)数据的连接 可以用++ 也可以concat
val arr1=Array(1,2,3);
val arr2=Array(4,5);
val arr3 = arr1++arr2
使用concat需要先用 import Array._ 引入包
val arr4=concat(arr1,arr2)
range(1,10,2)同样需要先引入import Array._
(5)函数
def funcname(参数列表):[return type]={}
return type为返回值类型,如果没有返回值,写Unit scala可以没有return关键字
def add(a:Int,b:Int):Int={a+b} 或者
def add(a:Int,b:Int):Int={
var sum = 0
sum = a+b
return sum
}
(6)匿名函数
val addInt=(a:Int,b:Int)=>x+y
addInt(1,2)
如果每个参数最多出现一次,用_替代
val addInt=(_:Int)+(_:Int);
addInt(1,2)
(7)循环
a to b 区间包括b,a until b 区间没有b
打印1到10
for (i<-1 to 10){
println(i+" ")}
打印99乘法表
for(i<-1 to 10;j<-1 to i){
println(i+"*"+j+"="+i*j+" ")
if(i==j) println()}
也可以过滤元素,比如大于6的偶数
for (i<-1 to 10;if i%2==0;if i >6){
println(i)}
使用yield把返回值作为变量存储,如将区间1-10之间的偶数记录下来
var even=for (i<=1 to 10;if i%2==0)yield i
(8)列表,列表的合并都可以用concat或者::: 反合并是.:::
val num1:List[Int]=List(1,2,3)
集合,集合的合并都可以++ 反合并是.++
val set:Set[Int]=Set(1,2,3)
(9)Map 可迭代键值对,大写Map为python里的字典
val person:Map[String,Int]=Map("Joho"->21,"Betty"->20,"Doge"->13)
person.keys
person.values
(10)函数组合器
map 通过一个函数重新计算列表里所有元素,小写map
val num1:List[Int]=List(1,2,3)
num1.map(x=>x*x)
foreach 类似map ,但是没有返回值,需要的h话需要加print
num1.foreach(x=>print(x*x+"t"))
filter 过滤,只保留为true的元素
num1.filter(x=>x%2==0)
flatten 把嵌套的解构展开,如二维转一维
val list1=List(List(1,2,3),List(4,5,6))
list1.flatten 得到 List[Int] = List(1, 2, 3, 4, 5, 6)
groupBy 分组操作,得到的是一个map,如根据奇偶分组,得到包含两个键值对的map
val num2:List[Int]=List(1,2,3,4,5,6,7,8,9,10)
num2.groupBy(x=>x%2==0)
得到 scala.collection.immutable.Map[Boolean,List[Int]] = Map(false -> List(1, 3, 5, 7, 9), true -> List(2, 4, 6, 8, 10))
example:
val phone:List[String]=List("209991,121231313,广东,深圳,移动",
"233233,323232342广东,广州,移动")
phone.groupBy (x=>x.split(",")(3)) #切分,针对第四个分组
(11)Scala写入 文件
Scala不提供特殊文件写入能力,xuyaoJAVA的I/O类
创建文件test,写入信息
import java.io._
val pw=new PrintWriter(new File ("/opt/scala/test.txt"))
pw.write("I am learning Scala")
pw.clsoe
(12)Scala读文件
import scala.io.Source
Source.fromFile("/opt/scala/test.txt").foreach{print}