gpt4 book ai didi

scala - 在不使用过滤器功能的情况下删除 RDD 中的第一个元素

转载 作者:行者123 更新时间:2023-12-04 02:03:07 25 4
gpt4 key购买 nike

我从一个文件中构建了一个 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。

有没有更好的方法来删除第一个元素,而不是像上面那样检查每个元素的索引值?

谢谢!

最佳答案

一种可能性是使用 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
)

这样,您只会在第一个迭代器上推进单个项目,而所有其他项目保持不变。这样效率更高吗?大概。无论如何,我会测试两个版本,看看哪个版本性能更好。

关于scala - 在不使用过滤器功能的情况下删除 RDD 中的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40287317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com