Spark shell

1.spark-shell是Spark的命令行界面,使用Spark-shell进入scala命令行;

spark的基础数据类型是RDD,即Resillient Distributed Dataset弹性分布式数据集,假设分布式系统下有很多的文件,这些文件有很多的行,RDD指的就是所有这些文件所有行的集合,而不是单独的某一行,所以我们对RDD进行的一系列操作都是对整个集合进行的操作,并且Spark是将整个RDD放到内存中进行处理的,而不是像MR那样放在磁盘中。

2.spark中一切皆为对象,对象皆有方法

val和var 均为变量

val 不可变变量,类似java中的final

var可变变量

3.Spark中的操作

Spark RDD支持两种操作:转换和行动操作;

spark的转换操作是懒操作,即先记录后期真正用时(有行动操作时)再执行;

转换操作就是把一种RDD转换为另一种RDD;

行动操作是实际地产生一种结果;

这样安排的意义,Spark的所有RDD都存在内存上非常的追求速度,所以要尽量减少RDD转换的次数。使用懒操作可以把整个RDD转换过程中可以合并的步骤合并起来执行,

常用的转换操作:

flatmap返回的是集合内的元素;相当于先做map返回一个RDD[集合[B]],在做flat返回RDD[B]

filter对输入的RDD中的每一个元素,通过一个函数做判断,过滤掉结果为假的元素;

distinct对RDD中的元素做去重操作

coalesce将RDD进行重新分区,使用HashPartitioner.

eg: val rddnew=rddold.coalesce(n); //对老的rdd重新分区;rddnew.partitions.size //查看rdd的分区数

当新分区数大于老的rdd分区数时,要指定suffle为true eg: val rddnew=rddold.coalesce(n,true)

repartition内置了coalesce的shuffle,true  eg:repartition(n)

randomSplit 将RDD切分成多个RDD,两个参数,一、权重是双精度浮点数数组,正常情况下该数组的和应等于1;二、随机数种子,写一个整数;

作用:用来把一份数据分成几份,比如我们做推荐系统,会把数据按照权重分成训练数据和测试数据;

union将两个结构相同的RDD合并在一起,合并后的RDD可能包含重复的元素;类似的还有intersection返回两个RDD的交集;subtract返回在RDD中出翔在其他的RDD中不出现的元素;

zipWithIndex产生一个键值对,键是RDD的元素,值是从零开始的ID值;

http://blog.csdn.net/Trigl/article/details/70853280

spark scala命令行界面下执行wordcount命令;

总代码,如下:

1 val textFile = sc.textFile("file:/home/training/training_materials/data/frostroad.txt")
2 val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
3 wordCounts.collect()
第一行,读取目录/home/training/training_materials/data/下的frostroad.txt文件;

val textFile=sc.textFile("path"); //读取原始数据并转化为Spark自己的数据格式RDD,一般读取原始数据有两种方式,上面的一种和下面的:

1.调用SparkContext的parallelize方法:

val rdd=sc.parallelize(Array(1 to 10)) //获取一个1到10的数组,用于测试程序,正式开发不用这种

2.所有Hadoop可以使用的数据源Spark都可以使用,当然我们最常用的还是SparkContext的textFile方法,读取hdfs上的文件有:

val rdd=sc.parallelize("hadoop://user/hive/test.log") 

第二行,计算文本中的单词出现的次数

val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
flatmap,map,reduceByKey都是RDD的转化操作;collect是RDD的行动操作;



猜你喜欢

转载自blog.csdn.net/songchunhong/article/details/79268314