sparkAPI使用案例
学习笔记cmj
学习笔记
展开
-
Spark API 之 aggregate(a)(fun1,fun2)
aggregate是一个柯里化函数,首先我们知道一个rdd有可能为多个partition。a: 相对于fun1 作用于每个partition中的元素的第一个元素,即为每个partition增加一个首元素a, 相对于fun2 作用于每个partition经过fun1后对应的结果和 afun1 : 作用于Rdd中的每个partition,并且遍历执行每个partition中的...原创 2018-06-26 10:16:37 · 417 阅读 · 0 评论 -
Spark API 之combineByKey
code: 可以copy 到自己的项目中测试package spark_apiimport org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}/** * combineByKey(createCombiner,mergeValue,mergeCombiners) * 这三个函数的...原创 2018-12-13 16:41:11 · 273 阅读 · 0 评论 -
Spark 之 重新设置分区的个数repartition()。
业务需求: 有事我们从hdfs上用spark 进行处理,很有可能 在hdfs 有多个block ,spark就会默认有多少个分区,在经过我们自己的逻辑计算后,得到的最后的结果数据并不是很大,同时想把它输出为一个文件,同理相反 想把她输出为多个文件,这时 repartition( num ) 就可以解决:demo: scala> var a = sc.paralleli...原创 2018-08-13 17:01:42 · 14739 阅读 · 0 评论 -
Spark API 之 distinct
distinct 函数是为了 去重,这个大家都知道,这里我举个简单的例子:demo: val a = sc.parallelize(List("a","b","c","d","a","b","c","d"),2) a.distinct().collect 输出结果:Array[String] = Array(d,原创 2018-07-04 16:50:30 · 2980 阅读 · 0 评论 -
Spark API 之 countApproxDistinctByKey
countApproxDistinctByKey(double)该函数根据精确度double,来计算相同key的大约个数。demo: val a = sc.parallelize(List("wang","li","cao","zou"),2); val b = sc.parallelize(a.takeSample(true,1000,0)) //随机抽取1000个样本 va...原创 2018-06-28 17:33:51 · 423 阅读 · 0 评论 -
Spark API 之 top() 函数
top函数是一个柯理化 函数,全写为:def top(num: Int)(implicit ord: Ordering[T]): Array[T] 并且带有 隐式参数ordering类型,说明 该方法中肯定会 用到排序, 参数num : 是排序后取出前 num个。demo1:val a = sc.parallelize(List(2,4,5,6,2,1,9,9,9,10,10,10,34...原创 2018-07-17 09:07:23 · 3482 阅读 · 0 评论 -
Spark API 之 countByValue
countByValue():根据rdd中的元素值相同的个数。返回的类型为Map[K,V], K : 元素的值,V :元素对应的的个数demo1:val a = sc.parallelize(List("a","b","c","d","a","a","a","c","c"),2);a.countByValue(); 输出的结果为原创 2018-07-16 16:12:06 · 2324 阅读 · 0 评论 -
Spark API 之 takeSample(boolean, sampleNum,seed) 详解
takeSample(boolean, sampleNum,seed):该函数是抽取随机数。前言:很重要,不然你不会理解seed的作用。用算法进行算出的结果为伪随机数,因为算法是固定的,只是我们在改变其参数而已,要知道在java中的Random类产生的数就是伪随机数,底层有一套自己的算法,该算法依靠seed(种子)参数,如果种子一样得到的结果也一样,而我们通常在开发中大部分是使用 new Rand...原创 2018-06-27 17:11:01 · 3870 阅读 · 0 评论 -
Spark API 之 countApproxDistinct
countApproxDistinct(jdz):该函数是用来计算去重后的值的大约个数,jdz: 该参数是用来规定值之间的相似度(精度值),值与值之间的相似度(精度)达到 jdz, 则将其看作是一样的值。jdz越小说明值与值之间越相似。控制在 0到0.4(不包括)之间。demo1: val rdd1 = sc.parallelize(List("a","b","c","d",...原创 2018-06-27 14:25:03 · 1653 阅读 · 0 评论 -
Spark API 之 count
count() 函数: 返回在Rdd中的所有元素(与分区partition没关系)demo: val rdd1 = sc.parallelize(List("a","b","c","d"),2) rdd1.count()结果为 :Long = 4原创 2018-06-27 13:57:40 · 3375 阅读 · 0 评论 -
Spark API 之 countByKey
countByKey 和count函数类似,但是countBykey针对 k->v 对的集合使用,计算key出现的个数,案例如下val a = sc.parallelize(List((3,"a"),(3,"b"),(3,"c"),(9,"a"),(3,"a")))a.countByKey() 输出:Map(3 -> 4, 9 -> 1)...原创 2018-07-02 14:16:42 · 387 阅读 · 0 评论 -
Spark API 之 countApproxDistinct 函数
countApproxDistinct(x):计算Rdd中元素的大约个数,并且去重,x代表精度,x越小代表计算的月仔细。demo代码:val r1 = sc.parallelize(1 to 10000,20)r1.countApproxDistinct(0.1) 输出的结果: Long = 8224r1.countApproxDistinct(0.02) 输出的结果: Long = 9916...原创 2018-07-02 14:03:13 · 440 阅读 · 0 评论 -
Spark API 之 coalesce 重新分区(partition)
coalesce(numPartition,boolean): numPartition: 代表要从新分 多少个区(partition) boolean : 代表 宽依赖(true)和 窄依赖(false),当boolean为true时,设置的分区数要大于等于或原小于来的分区数, 但是当boolean为fal...原创 2018-06-26 14:41:35 · 407 阅读 · 0 评论 -
Spark API 之 cartesian
该函数是求笛卡尔及很简单的 demo :val a = sc.parallelize(List(2,3,4))val b = sc.parallelize(List(5,6,7))a.cartesian(b) 的结果为: Array[(Int, Int)] = Array((2,5), (2,6), (2,7), (3,5), (3,6), (3,...原创 2018-06-26 11:22:20 · 480 阅读 · 0 评论 -
Spark API 之 cogroup 使用
tuple1Rdd.cogroup(tuple2Rdd) : 该方法针对的是元组之间的操作(RDD里面的元素是tuple对象,这里我简述为元组),否者无效,该元组是kv 对出现,cogroup方法的操作逻辑是:如果元组的k相同,则收集他们对应的v, 返回的类型为Array[(K, (Iterable[V], Iterable[V],*))] 一个数组类型,数组中的每个元素为元组Tuple,元组中的...原创 2018-06-19 15:33:29 · 3441 阅读 · 3 评论 -
Spark API 之 collectAsMap 使用
collectAsMap 的使用对象必须是Tuple 元组类型,在spark中将元组类型转换为Map类型,应用示例:val a = sc.parallelize(List(2,3,4,5))val b = sc.parallelize(List("a","b","c","d"))a.zip(b).collectAsMap 结果为:scala.collection.Map[Int,String] =...原创 2018-06-19 11:56:15 · 4618 阅读 · 0 评论 -
Spark API 之subtract(差集)
subtract差集函数存在三种我们主要针对第一种,常用的也是第一种,而其他两种是差集后的分区策略:def subtract(other: RDD[T]): RDD[T]def subtract(other: RDD[T], numPartitions: Int): RDD[T]def subtract(other: RDD[T], p: Partitioner): RDD[T]案例:...原创 2019-02-11 22:47:31 · 4334 阅读 · 0 评论