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)

相关推荐

  • R语言数据可视化ggplot绘制置信区间以及分组绘图技巧是什么

    技术R语言数据可视化ggplot绘制置信区间以及分组绘图技巧是什么本篇文章为大家展示了R语言数据可视化ggplot绘制置信区间以及分组绘图技巧是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希

    攻略 2021年11月5日
  • STL栈与队列

    技术STL栈与队列 STL栈与队列#includequeue// 队列
    #includestack//栈stackint s;//参数也是数据类型,这是栈的定义方式
    queueint q; //参

    礼包 2021年12月3日
  • 如何理解504 gateway time-out以及504网关超时错误的解决方法

    技术如何理解504 gateway time-out以及504网关超时错误的解决方法这篇文章给大家介绍如何理解504 gateway time-out以及504网关超时错误的解决方法,内容非常详细,感兴趣的小伙伴们可以参

    攻略 2021年11月25日
  • ios-xr如何配置PBB-EVPN

    技术ios-xr如何配置PBB-EVPN这篇文章给大家分享的是有关ios-xr如何配置PBB-EVPN的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。配置l2vpn
    bridge group

    攻略 2021年11月21日
  • 高血糖最佳治疗方法,高血糖的最佳治疗方法是什么

    技术高血糖最佳治疗方法,高血糖的最佳治疗方法是什么从目前的治疗手段上来讲,糖尿病暂时不能完全治愈,同时由于糖尿病的致病因素多种多样以及对于患者本身的要求比较多,所以在日常生活当中出现血糖波动情况并不少见高血糖最佳治疗方法

    生活 2021年10月22日
  • debian如何安装mysql

    技术debian如何安装mysql这篇文章主要介绍了debian如何安装mysql,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。debian安装mysql

    攻略 2021年11月26日