spark中mapPartitions双重循环或两次遍历(duplicate)
来源:互联网 发布:centos关机命令 编辑:程序博客网 时间:2024/06/06 19:35
在spark当中通常需要对mapPartitions内部进行计算,这样可以在不进行网络传输的情况下,对数据进行局部计算
而mapPartitions中的迭代器为Iterator
scala中的Iterator只能进行一次迭代,使用过后就消失了,所以在mapPartitions中既不能两次遍历
如:一次mapPartitions求最大最小值
val it = Iterator(20, 40, 2, 50, 69, 90)println(“Maximum valued element ” + it.max) // 90println(“Minimum valued element ” + it.min) // 出错
同理,如果进行双重循环等操作,在内部循环第一次循环完毕时,外部循环也会直接跳出
(而这对于计算而言很重要 )
所以在使用两次遍历或双重循环时需要对Iterator进行拷贝
需要用到关键字 duplicate 和 iter.toList
示例如下:(计算KNN高斯核密度)
def gaussianKernel(iterator: Iterator[DenseVector[Double]]): Iterator[Tuple2[DenseVector[Double], Double]] = { var res = List[(DenseVector[Double], Double)]() val (bakiter, curiter) = iterator.duplicate val (sizeiter, tmpiter) = bakiter.duplicate val tmplist = tmpiter.toList val curlist = curiter.toList val size = sizeiter.size val k = sqrt(size).toInt curlist.foreach { cur => var sumtmp = 0.0 val abfDist = ArrayBuffer[Double]() tmplist.foreach { tmp => abfDist += exp(-sum(pow(cur - tmp, 2)) / (2.0 * C)) } val abfDistSorted = abfDist.sorted for (i <- 0 until k) { sumtmp += abfDistSorted(size - 1 - i) } res.::=(cur, sumtmp) } res.iterator }
0 0
- spark中mapPartitions双重循环或两次遍历(duplicate)
- Spark中mapPartitions使用
- Spark中foreachPartition和mapPartitions的区别
- ThinkPHP 双重循环遍历输出
- 队伍分组统计 (双重循环遍历出来)或 (sql语句查出来
- Spark RDD中Transformation的map、flatMap、mapPartitions、glom详解
- spark:map mapPartitions flatmap
- Spark mapPartitions()操作
- spark:map mapPartitions flatmap
- Spark中的mapPartitions
- spark--transform算子--mapPartitions
- spark小技巧-mapPartitions
- Spark Transformation —— mapPartitions
- Spark API 之 map、mapPartitions
- Velocity学习笔记----foreach双重循环遍历list
- mapPartitions
- spark map和mapPartitions的区别
- js中循环遍历
- 优化与凸优化初始
- 子女免费读公立学校--赴美访问学者福利
- 一天一条Linux指令-help
- Angular2 中的依赖包详解
- Android ANR产生的原因与解决方法
- spark中mapPartitions双重循环或两次遍历(duplicate)
- mvc4高级编程MVC Music Store建模
- 科大讯飞使用android SDK出现21001错误码
- 基于zookeeper实现的分布式读写锁
- [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher J HDU 2594
- Manifest merger failed with multiple errors, see logs 清单文件报错解决方案
- Linux下 $(cd `dirname $0`;pwd)
- Java Web开发模式
- 序列图