spark-1

先测试搭好的spark集群:

本地模式测试:

在spark的目录下:

./bin/run-example SparkPi 10 --master local[2]

验证成功:

 集群模式 Spark Standalone:

spark-shell --master yarn-client  集群模式Spark Standalone

验证成功:

集群模式 Spark on Yarn集群上yarn-cluster模式:

./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster examples/jars/spark-examples_2.11-2.0.2.jar 10

实现一个wordcount将文件导入scala中:

先尝试一下map函数,map不改变数据的结构,但可以对数据进行操作

 相当于对每个值,做了乘2的操作。

 

用空格分隔

 将每一行用空格做分隔。

 简化,_是通配符,代表每个x

 将map之后的数据打平,等价于 lines.map(x=>x.split(" ")).flatten

将每个单词后面加一个“1”字符,

 

groupby操作

从tuple(forgotten,1)中把第一个单词提出来forgotten作为key,
把整个tuple作为value,收集到一个list中
这样对应的value是一个list里面包含所有对应key的tuple
例:
_1:forgotten -> _2:List((forgotten,1), (forgotten,1), (forgotten,1))
整个list大小就是对应key:forgotten出现的次数

 下方的map(x=>(x._1,x._2.length)) 只能用这种形式因为是两个tunple.当中的length也可换成size.

如果不通过list大小来算具体单词的次数(词频):

要将map中读的list中的第二个值相加.,也可以把sum改成reduce(_+_)

reduce(_+_)计算原理:
 List(1, 1, 1) ((1+1)+1)
 sum += x

按数字反向排序:

取前三个:

其他方法:

 

lines.flatMap(_.split(" "))
    .map((_,1))
    .groupBy(_._1)
    .mapValues(_.size)
返回的是一个Map(dict),key:单词,value:词频

 

lines.flatMap(_.split(" "))
    .map((_,1))
    .groupBy(_._1)
    .mapValues(_.size)
    .toArray
    .sortWith(_._2>_._2)
    .slice(0,10)


sortBy(_._2).reverse == sortWith(_._2>_._2)
_._2表示按照第二个进行排序

 

mkString(拼接字符串)

正则去取多余的符号

正则:
python  import re
p = r'[0-9]+'
p.findall(s)这个是一个数组
p.findall(s)[0]

scala:
val p = "[0-9]+".r
val s = "546465sfgidg"
p.findAllIn(s)是一个迭代器
p.findAllIn(s).toArray 将迭代器转为数组形式.

p.findAllIn(s).foreach(x=>println(x))
foreach也是扫一遍数据

p.findAllIn(s).mkString("") #变成字符串
mkString("[","","]")
取标点,只取数字和字符
val p = "[0-9a-zA-Z]+".r
lines.flatMap(_.split(" "))
    .map(x=>(p.findAllIn(x).mkString(""),1))
    .groupBy(_._1)
    .mapValues(_.size)
    .toArray
    .sortWith(_._2>_._2)
    .slice(0,10)

lines.flatMap(_.split(" ")).map(x=>(p.findAllIn(x).mkString(""),1))

fold函数:

def f(){}
lines.map(f)
    
a.foldLeft(0)(_+_)

sum = 0
for i in a:
    sum += i
return sum

tuple求和
sum = 0
for i in a:
    sum += i[1]  #1相当于第二个值,相当于scala中的_.__2
return sum

a.foldLeft(0)(_+_._2)  #_._2是第二个,0没有变.0相当于sum=0

map的嵌套操作;

原文地址:https://www.cnblogs.com/taozizainali/p/9016599.html