Spark driver端得到executor返回值的方法

技术Spark driver端得到executor返回值的方法这篇文章将为大家详细讲解有关Spark driver端得到executor返回值的方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后

本文将详细解释如何从Spark驱动程序端的执行器获取返回值。这篇文章的内容质量很高,所以边肖会分享给大家参考。希望你看完这篇文章后有所了解。

有人说火花的代码不优雅,这波受不了。实际上,spark代码不优雅的主要原因是不熟悉scala。我认为spark代码仍然是值得一读的伟大大数据框架之一。

今天的文章不是为了争论spark代码是否优雅,而是主要谈一些我们在了解Spark源代码后可以使用的技巧。

使用spark时,总会有一些需求大不相同。例如,一位高尔夫球手提出了这样的需求:

白健,我想在驱动端执行任务的时候得到执行器返回的结果。例如,任务是一个规则引擎,我想知道每个规则命中多少条数据。我该怎么做?

这不是很闷热很普通吗?输出后,可以在mysql中运行sql,这是理所当然的,但这通常会更麻烦。而且有时候,数据可能会用在驱动上?具体应该怎么做?

大部分想法估计是collect方法,那么如何用collect实现呢?你可以自己想想。我只能告诉你这不容易。最好将其输出到数据库,然后驱动程序编写sql进行分析。

另一个考虑是使用自定义累加器。这样的话,结果可以在执行器端累加,然后在驱动端使用,但是具体实现起来也很麻烦。你也可以自己想办法~

然后,波浪提示会给你介绍一个比较常用和淫荡的操作。

实际上,我们在这个操作中首先想到的应该是count函数,因为返回给驱动程序然后聚合的是任务的返回值。我们可以点击想法计数功能,你可以看到

defcount(): long=sc . runjob(this,Utils.getIteratorSize _)。总和

也就是sparkcontext的runJob方法。

Utils.getIteratorSize _该方法主要统计每个迭代器中的元素个数,即每个分区中的元素个数,返回值为元素个数:

/* * * countsethnumberofelementtsfaniteratorsingawhileloopratherhancalling *[[Scala . collection . iterator # size]]因为它是一个循环,它在安全当前版本中是一个轻流*。*/defgetIteratorSize[T](iterator : iterator[T]): long={ varcount=0 while(iterator . hasnext){ count=1 iterator . next()} count }

然后runJob返回一个数组,每个数组的元素就是我们任务执行函数的返回值,然后我们调用sum得到我们的统计量。

然后我们可以用这个想法来实现我们最初的目标。这是直接在波峰上的例子:

import org . Apache . spark . { SparkConf,SparkContext,task context } import org . elastic search . Hadoop . CFG . configuration options object es2 sparkrunjob { def main(args : Array[String]): Unit={ val conf=new SparkConf()。setMaster('local[*]')。setAppName(this . getclass . getcanonicalname)conf . set(configuration options。ES_NODES,' 127 . 0 . 0 . 1 ')conf . set(configuration options。ES_PORT,' 9200 ')配置集(配置选项。“真”)配置集(配置选项。ES_INDEX_AUTO_CREATE,' true ')配置集(配置选项。ES_NODES_DISCOVERY,' false ')conf . set(' ES . write . rest . error . handlers ',' ignorrecifact ')conf . set(' ES . write . rest . error . handler . ignorrecifitshandler ')val sc=new SparkContext(conf)import org . elastic search . spark . _ val rdd=sc . esjsonrdd(' post ')。重分区(10)rdd . count()val func=(itr : Iterator[(String,String)]={ var count=0 itr . foreach(每个={ count=1 })(taskscontext . getpartitionid(),count) } val res=sc.runJob(rdd,func)RES . foreach(println)sc . stop()} }

在这个例子中,驱动程序得到的是每个任务处理的数据量。

下面是如何从Spark驱动程序端的执行器获取返回值。希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/86589.html

(0)

相关推荐

  • CentOS7源码安装Python、virtualenv虚拟环境安装、uwsgi安装配置

    技术CentOS7源码安装Python、virtualenv虚拟环境安装、uwsgi安装配置 CentOS7源码安装Python、virtualenv虚拟环境安装、uwsgi安装配置一:Python源码

    礼包 2021年11月1日
  • 中序遍历python(python前序后序遍历构造二叉树)

    技术如何从前序与中序遍历序列构造python二叉树如何从前序与中序遍历序列构造python二叉树,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获

    攻略 2021年12月13日
  • ps怎么做倒影,倒影后期ps是怎么做出来的

    技术ps怎么做倒影,倒影后期ps是怎么做出来的手机一键制作“倒影”特效ps怎么做倒影:想给照片后期制作成“倒影”画面,小月分享一个方便快捷的方法,基本一键制作。比如:下图的冰雪城堡倒影特效原图就是一张城堡雪景图如果想更逼

    生活 2021年11月1日
  • 数据库分布式事务的两段式和三段式有哪些区别

    技术数据库分布式事务的两段式和三段式有哪些区别这篇文章主要介绍“数据库分布式事务的两段式和三段式有哪些区别”,在日常操作中,相信很多人在数据库分布式事务的两段式和三段式有哪些区别问题上存在疑惑,小编查阅了各式资料,整理出

    攻略 2021年11月17日
  • 阿里巴巴开源Sentinel限流方案搭建是怎样的

    技术阿里巴巴开源Sentinel限流方案搭建是怎样的阿里巴巴开源Sentinel限流方案搭建是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所

    攻略 2021年10月20日
  • Django中的unittest应用是什么

    技术Django中的unittest应用是什么这篇文章主要讲解了“Django中的unittest应用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Django中的

    攻略 2021年11月14日