use*_*205 4 scala apache-spark rdd
我从一个文件构建了一个 RDD,其中 RDD 中的每个元素都是文件中由分隔符分隔的部分。
val inputRDD1:RDD[(String,Long)] = myUtilities.paragraphFile(spark,path1)
.coalesce(100*spark.defaultParallelism)
.zipWithIndex() //RDD[String, Long]
.filter(f => f._2!=0)
Run Code Online (Sandbox Code Playgroud)
我执行上面最后一个操作(过滤器)的原因是删除第一个索引 0。
有没有更好的方法来删除第一个元素,而不是像上面那样检查每个元素的索引值?
谢谢!
一种可能性是使用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
)
Run Code Online (Sandbox Code Playgroud)
这样,您只能在第一个迭代器上推进单个项目,而所有其他项目保持不变。这样效率会更高吗?大概。无论如何,我会测试这两个版本,看看哪个版本性能更好。
| 归档时间: |
|
| 查看次数: |
3652 次 |
| 最近记录: |