先测试搭好的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的嵌套操作;

浙公网安备 33010602011771号