第18课:Spark Streaming中空RDD处理及流处理程序优雅的停止

原创 2016年06月01日 19:26:34

第18课:Spark Streaming中空RDD处理及流处理程序优雅的停止
/* 王家林老师授课http://weibo.com/ilovepains  每天晚上20:00YY频道现场授课频道 68917580*/
1 Spark Streaming中空RDD的处理
2 Spark Streaming程序优雅的停止

 


跟51cto和csdn课堂合作,最最重要的是如何贡献社会,祝福每个人拥有美好的人生。
机器学习在spark 2.x基础上授课。

空RDD没做什么事情又要消耗计算资源cpu cores,虽然什么都干,这个必须进行处理。
判断RDD有没有元素。
1、if(rdd.count()){} //不好的地方,count会触发一个job,不要这个方式。
2、if (!rdd.isEmpty){}// 目前有效的方式
3、if (rdd.partitions.isEmpty) 
4、if(rdd.partitions > 0){
   rdd.partitions.map(_)
  
   //rdd.iterator //这个在executor中执行的,现在我们在driver中,无法使用的
   }
5、rdd.partitions.isEmpty //这个不太对 ,不行的

 

 

/**
 * An RDD that has no partitions and no elements.
 */
private[spark] class EmptyRDD[T: ClassTag](sc: SparkContext) extends RDD[T](sc, Nil) {

  override def getPartitions: Array[Partition] = Array.empty

  override def compute(split: Partition, context: TaskContext): Iterator[T] = {
    throw new UnsupportedOperationException("empty RDD")
  }
}

  


  课外资料

http://stackoverflow.com/questions/28454357/spark-efficient-way-to-test-if-an-rdd-is-empty

 

def time(n : Long, f : (RDD[Long]) => Boolean): Unit = {
  val start = System.currentTimeMillis()
  val rdd = sc.parallelize(1L to n, numSlices = 100)
  val result = f(rdd)
  printf("Time: " + (System.currentTimeMillis() - start) + "   Result: " + result)
}

time(1000000000L, rdd => rdd.take(1).length == 0L)
time(1000000000L, rdd => rdd.mapPartitions(it => Iterator(!it.hasNext)).reduce(_&&_))
time(1000000000L, rdd => rdd.count() == 0L)
time(1000000000L, rdd => rdd.takeSample(true, 1).isEmpty)
time(1000000000L, rdd => rdd.fold(0)(_ + _) == 0L)

time(1L, rdd => rdd.take(1).length == 0L)
time(1L, rdd => rdd.mapPartitions(it => Iterator(!it.hasNext)).reduce(_&&_))
time(1L, rdd => rdd.count() == 0L)
time(1L, rdd => rdd.takeSample(true, 1).isEmpty)
time(1L, rdd => rdd.fold(0)(_ + _) == 0L)

time(0L, rdd => rdd.take(1).length == 0L)
time(0L, rdd => rdd.mapPartitions(it => Iterator(!it.hasNext)).reduce(_&&_))
time(0L, rdd => rdd.count() == 0L)
time(0L, rdd => rdd.takeSample(true, 1).isEmpty)
time(0L, rdd => rdd.fold(0)(_ + _) == 0L)

 

 

 

 

On my local machine with 3 worker cores I got these results

Time:    21   Result: false
Time:    75   Result: false
Time:  8664   Result: false
Time: 18266   Result: false
Time: 23836   Result: false

Time:   113   Result: false
Time:   101   Result: false
Time:    68   Result: false
Time:   221   Result: false
Time:    46   Result: false

Time:    79   Result: true
Time:    93   Result: true
Time:    79   Result: true
Time:   100   Result: true
Time:    64   Result: true

 

版权声明:王家林大咖2018年新书《SPARK大数据商业实战三部曲》清华大学出版,当当网购:http://product.dangdang.com/25230552.html

Spark定制班第18课:Spark Streaming中空RDD处理及流处理程序优雅的停止

本期内容: 1 Spark Streaming中的空RDD处理 2 Spark Streaming程序的停止 1 Spark Streaming中的空RDD处理      ...
  • andyshar
  • andyshar
  • 2016年06月05日 23:33
  • 1090

Spark API 详解/大白话解释 之 RDD、partition、count、collect

RDD定义: 任何数据在Spark中都被转换为RDD。一个RDD可以看成是一个数组,不过是切分开,分布在不同的机器上,就并行处理。 由数据转换为RDD: 举例:从普通数组创建RDD,里面包含了1到9这...
  • guotong1988
  • guotong1988
  • 2016年01月21日 11:25
  • 6138

spark内核揭秘-09-RDD的count操作 触发Job全生命周期-01

spark内核揭秘-09-RDD的count操作 触发Job全生命周期-01 spark内核揭秘-09-RDD的count操作 触发Job全生命周期-01 spark内核揭秘-09-RDD的count...
  • stark_summer
  • stark_summer
  • 2015年01月20日 16:10
  • 17343

Spark Streaming源码解读之RDD生成全生命周期详解

本篇博客将详细探讨DStream模板下的RDD是如何被创建,然后被执行的。在开始叙述之前,先来思考几个问题,本篇文章也就是基于此问题构建的。 1. RDD是谁产生的? 2. 如何产生RDD? ...
  • snail_gesture
  • snail_gesture
  • 2016年05月18日 22:16
  • 3201

第18课:Spark Streaming中空RDD处理及流处理程序优雅的停止

第18课:Spark Streaming中空RDD处理及流处理程序优雅的停止 /* 王家林老师授课http://weibo.com/ilovepains  每天晚上20:00YY频道现场授课频道 68...
  • duan_zhihua
  • duan_zhihua
  • 2016年06月01日 19:26
  • 809

Spark应用(一)提取RDD内部信息和信息放入RDD

提取RDD内部信息      对于提取RDD内部信息有的人或许认为是一件非常简单的事情,“直接foreach操作不就行了?”。如果RDD不是为了分布式式计算。那么這样的逻辑就完全可以。 直接在外部顶一...
  • legotime
  • legotime
  • 2017年03月08日 13:46
  • 1105

Spark Streaming中空batches处理的两种方法

Spark Streaming是近实时(near real time)的小批处理系统。对给定的时间间隔(interval),Spark Streaming生成新的batch并对它进行一些处理。每个ba...
  • LW_GHY
  • LW_GHY
  • 2016年05月23日 09:47
  • 646

Spark 定制版:018~Spark Streaming中空RDD处理及流处理程序优雅的停止

本讲内容:a. Spark Streaming中的空RDD处理 b. Spark Streaming程序的停止注:本讲内容基于Spark 1.6.1版本(在2016年5月来说是Spark最新版本)...
  • zisheng_wang_DATA
  • zisheng_wang_DATA
  • 2016年06月28日 21:52
  • 817

第18课:Spark Streaming中空RDD处理及流处理程序优雅的停止

1.SparkStreaming中空RDD处理 JobGenerator /** Generate jobsand perform checkpoint for the given `time`...
  • luobailian
  • luobailian
  • 2016年06月21日 13:41
  • 1612

第97课:Spark Streaming在线动态计算特定时间窗口下热门商品排名

使用Spark Streaming + Spark SQL实现在线动态计算出特定时间窗口下的不同种类商品中的热门商品排名...
  • sd637
  • sd637
  • 2016年05月27日 15:35
  • 1582
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第18课:Spark Streaming中空RDD处理及流处理程序优雅的停止
举报原因:
原因补充:

(最多只允许输入30个字)