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)

相关推荐

  • 厘米的符号,cm这是数学的什么单位

    技术厘米的符号,cm这是数学的什么单位数学单位mm,cm代表毫米和厘米。 毫米,英文缩写mm(或 毫米,又称公厘(或公釐),是长度单位和降雨量单位,英文缩写mm(或 毫米。1毫米相当于1米的一千分之一(此即为毫的字义)。

    生活 2021年10月20日
  • 电脑安装安卓系统,安卓系统如何安装在电脑上

    技术电脑安装安卓系统,安卓系统如何安装在电脑上手机使用电脑下载安装软件的方法电脑安装安卓系统:
    1.使用电脑浏览器下载APK格式的安装包,连接数据线传输至手机,然后操作手机:在应用程序-我的文件中找到安装包,运行后点击安

    生活 2021年10月20日
  • 用一根长36里米的铁丝围成一,用一根铁丝围成一个长26厘米

    技术用一根长36里米的铁丝围成一,用一根铁丝围成一个长26厘米正方形的周长=长方形的周长=(26+16)×2=84(厘米)用一根长36里米的铁丝围成一;正方形的边长=84÷4=21(厘米);正方形的面积=21×21=44

    生活 2021年10月20日
  • 中国标志性建筑,中国最具标志性的建筑有哪些

    技术中国标志性建筑,中国最具标志性的建筑有哪些每个国家都拥有一些标志性建筑,一看到它就能唤起对于它的记忆,标志性建筑也是一个国家的名片和象征。要说中国有哪些标志性建筑中国标志性建筑?不同的思考维度有不同的答案,如果从建筑

    生活 2021年10月27日
  • Hive高阶聚合函数用法示例

    技术Hive高阶聚合函数用法示例这篇文章主要为大家展示了“Hive高阶聚合函数用法示例”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Hive高阶聚合函数用法示例”这篇文章吧。

    攻略 2021年12月10日
  • python光学仿真面向对象光学元件类的实现是什么

    技术python光学仿真面向对象光学元件类的实现是什么python光学仿真面向对象光学元件类的实现是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能

    攻略 2021年10月20日