上面的一些实验测试,是为了验证RDD的一些特征。
RDD上的一些复杂的方法:将老师发的文件spark_rdd_api.txt文件中的练习一下即可。查看分区中的数据是什么:val rdd1 = sc.parallelize(List(1,2,3,4,5,6,7,8,9), 2)rdd1.mapPartitionsWithIndex(func).collect常用函数:math.max(_,_)和math.min(_, _)RDD并没有定义reduceByKey方法,但是它能调这个方法,其实它是在PairRDDFunction中定义的。它将普通的RDD转换成了PairRDDFunction,在RDD单例对象中就定义了一个rddToPairRDDFunction方法。在SparkContext(注意是object)中定义了很多implicit,其中就包含rddToPairRDDFunction方法,它已经被废弃,它调用的就是RDD单例对象中定义的那个rddToPairRDDFunction方法。foreachPartition:这个方法在以后开发中用的非常非常多!!!它可以将每一个分区中的数据拿出来进行处理,在Spark中计算好的数据不需要sqoop工具,定义一个函数就可以直接往关系型数据库中写(后面会专门有例子讲)。注意coalesce(分区数, Boolean)方法和repartition方法的关系,其实repartition方法底层调的就是coalesce(分区数, shuffle=true),只不过给它传了一个shuffle=true,表示分区中的数据一定要shuffle,也就是说数据一定要在网络中传递,以数据为单位重新分配到新的RDD中。如果我们直接调用coalesce(分区数,false)方法给它传一个false的话,就不会有shuffle。它只会以分区为单位分配给新的RDD中的分区。而分区中的数据是不会重新洗牌的。
新闻热点
疑难解答