(第八题后续补上)
-
spark任务程序,将任务提交集群运行。(参数指定)(10)
spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode client \ ./examples/jars/spark-examples_2.11-2.1.1.jar \ 100
-
写出下列代码的打印结果。(5分)
def joinRdd(sc:SparkContext) { val name= Array((1,"spark"),(2,"flink"),(3,"hadoop")**,(4,”java”))** val score= Array((1,100),(2,90),(3,80)**,(5,90))** val namerdd=sc.parallelize(name); val scorerdd=sc.parallelize(score); val result = namerdd.join(scorerdd); result.collect.foreach(println); } //答案:(spark,100),(flink,90),(hadoop,80)
-
写出触发shuffle的算子(至少五个)(5分)
def distinct() ef reduceByKey def groupByKey def groupBy sortByKey def join
-
RDD的概念和特性(10分)
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据抽象。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。
官网解释:
1)一组分片(Partition),即数据集的基本组成单位。对于RDD来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度。用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的CPU Core的数目。
2)一个计算每个分区的函数。Spark中RDD的计算是以分片为单位的,每个RDD都会实现compute函数以达到这个目的。compute函数会对迭代器进行复合,不需要保存每次计算的结果。
3)RDD之间的依赖关系。RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。
4)一个Partitioner,即RDD的分片函数。当前Spark中实现了两种类型的分片函数,一个是基于哈希的HashPartitioner,另外一个是基于范围的RangeP