spark RDD countApproxDistinct

package com.latrobe.spark

import org.apache.spark.{SparkConf, SparkContext}

/**
 * Created by spark on 15-1-18.
 * countApproxDistinct : RDD的一个方法,作用是对RDD集合内容进行去重统计。
 * 该统计是一个大约的统计,参数relativeSD控制统计的精确度。
 * relativeSD越小,结果越准确
 */
object CountApproxDistinct {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("spark-demo").setMaster("local")
    val sc = new SparkContext(conf)

    /**
     * 构建一个集合,分成20个partition
     */
    val a = sc.parallelize(1 to 10000 , 20)
    //RDD a内容复制5遍,其中有50000个元素
    val b = a++a++a++a++a

    //结果是9760,不传参数,默认是0.05
    println(b.countApproxDistinct())
    //结果是9760
    println(b.countApproxDistinct(0.05))
    //8224
    println(b.countApproxDistinct(0.1))
    //10000
    println(b.countApproxDistinct(0.001))

  }
}
时间: 2024-09-28 16:37:26

spark RDD countApproxDistinct的相关文章

Spark RDD、DataFrame和DataSet的区别

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 转载请标明出处:小帆的帆的专栏 RDD 优点: 编译时类型安全 编译时就能检查出类型错误 面向对象的编程风格 直接通过类名点的方式来操作数据 缺点: 序列化和反序列化的性能开销 无论是集群间的通信, 还是IO操作都需要对对象的结构和数据进行序列化和反序列化. GC的性能开销 频繁的创建和销毁对象, 势必会增加GC import org.apache.spark.sql.SQLContext import org.apache

Spark RDD解密

1.  基于数据集的处理: 从物理存储上加载数据,然后操作数据,然后写入数据到物理设备; 基于数据集的操作不适应的场景: 不适合于大量的迭代: 不适合交互式查询:每次查询都需要对磁盘进行交互. 基于数据流的方式不能够复用曾经的结果或者中间的结果; 2. RDD弹性数据集 特点: A)自动的进行内存和磁盘数据的存储切换: B) 基于lineage的高效容错: C) Task如果失败会自动进行重试 D) Stage如果失败会自动进行重试,而且只会计算失败的分片; E) Checkpoint和pers

Spark3000门徒第14课spark RDD解密总结

今晚听了王家林老师的第14课spark RDD解密,课堂笔记如下: Spark是基于工作集的应用抽象,RDD:Resillient Distributed Dataset是基于工作集的,spark可以对结果重用. 位置感知:spark比hadoop更精致. RDD是lazy的,是分布式函数式编程的抽象,RDD可以看做一个只读的List或者Array.产生的中间结果怎么办? 不能让 他立即计算,采用Lazy级别,只对数据处理做标记.所以RDD操作是有向的,链式的,所以Stage有1000个步骤,不

Spark RDD Transformation 简单用例(一)

map(func) /** * Return a new RDD by applying a function to all elements of this RDD. */ def map[U: ClassTag](f: T => U): RDD[U]  map(func) Return a new distributed dataset formed by passing each element of the source through a function func.  将原RDD中的

【spark 深入学习 03】Spark RDD的蛮荒世界

RDD真的是一个很晦涩的词汇,他就是伯克利大学的博士们在论文中提出的一个概念,很抽象,很难懂:但是这是spark的核心概念,因此有必要spark rdd的知识点,用最简单.浅显易懂的词汇描述.不想用学术话的语言来阐述RDD是什么,用简单.容易理解的方式来描述. 一.什么是RDD,RDD出现的背景 Mapreduce计算模型的出现解决了分布式计算的诸多难题,但是由于MR对数据共享的解决方案比较低效,导致MR编程模型效率不高,将数据写到一个稳定的外部存储系统,如HDFS,这个会引起数据复写.磁盘IO

Spark RDD整理

参考资料: Spark和RDD模型研究:http://itindex.net/detail/51871-spark-rdd-模型 理解Spark的核心RDD:http://www.infoq.com/cn/articles/spark-core-rdd/ Spark RDD详解:http://f.dataguru.cn/thread-475874-1-1.html http://developer.51cto.com/art/201309/410276_1.htm

通过一系列破坏行为加深对spark RDD 的理解(或者是猜测)(python 版)

这个实验由一个实验案例产生,实验中,需要对一个数据集进行维护,其中有一个需要对数据一条条进行插入: 下面是最二的写法: rdd=sc.parallelize([-1]) for i in range(10000): rdd=rdd.union(sc.parallelize([i])) 每次插入数据,新建一个rdd,然后union. 后果是: java.lang.OutOfMemoryError: GC overhead limit exceeded at org.apache.spark.rdd

Apache Spark RDD之RDD的转换

RDD的转换 Spark会根据用户提交的计算逻辑中的RDD的转换和动作来生成RDD之间的依赖关系,同时这个计算链也就生成了逻辑上的DAG.接下来以“Word Count”为例,详细描述这个DAG生成的实现过程. Spark Scala版本的Word Count程序如下: 1: val file = spark.textFile("hdfs://...") 2: val counts = file.flatMap(line => line.split(" "))

Spark RDD API详解(一)(转)

RDD是什么? RDD是Spark中的抽象数据结构类型,任何数据在Spark中都被表示为RDD.从编程的角度来看,RDD可以简单看成是一个数组.和普通数组 的区别是,RDD中的数据是分区存储的,这样不同分区的数据就可以分布在不同的机器上,同时可以被并行处理.因此,Spark应用程序所做的无非是把需要 处理的数据转换为RDD,然后对RDD进行一系列的变换和操作从而得到结果.本文为第一部分,将介绍Spark RDD中与Map和Reduce相关的API中. 如何创建RDD? RDD可以从普通数组创建出