我从一个文件构建了一个 RDD,其中 RDD 中的每个元素都是文件中由分隔符分隔的部分。
val inputRDD1:RDD[(String,Long)] = myUtilities.paragraphFile(spark,path1)
.coalesce(100*spark.defaultParallelism)
.zipWithIndex() //RDD[String, Long]
.filter(f => f._2!=0)
我执行上面最后一个操作(过滤器)的原因是删除第一个索引 0。
有没有更好的方法来删除第一个元素,而不是像上面那样检查每个元素的索引值?
Thanks!
一种可能性是使用RDD.mapPartitionsWithIndex
并从迭代器中删除索引 0 处的第一个元素:
val inputRDD = myUtilities
.paragraphFile(spark,path1)
.coalesce(100*spark.defaultParallelism)
.mapPartitionsWithIndex(
(index, it) => if (index == 0) it.drop(1) else it,
preservesPartitioning = true
)
这样,您只能在第一个迭代器上推进单个项目,而所有其他项目保持不变。这样效率会更高吗?大概。无论如何,我会测试这两个版本,看看哪个版本性能更好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)