我面临一个非常有趣的问题,可以表述如下:
给定String的RDD,计算连续行对的RDD。例如,如果输入是具有值“b”,“c”,“f”,“d”,“a”的RDD,则预期输出为(“a”,“b”),(“ b”, “C”),( “C”, “d”),( “d”, “F”)
我们可以通过应用以下代码轻松完成:
val sorted = input.sortByKey()
val output = RDDFunctions.fromRDD(sorted).sliding(2)
但使用slidingRDD非常耗时,所以我问自己是否有更好的方法可以解决这个问题。
编辑: 在我的电脑上使用以下代码
test("sliding"){
val rdd = sqlContext.read
.format("com.databricks.spark.csv")
.option("header", "true")
.option("inferSchema", "true")
.option("mode", "FAILFAST")
.option("delimiter", ";")
.load(s"${testDataPath}filter/firstLastRand10x6.csv").select("first").sort("first").rdd
val slidingRdd = RDDFunctions.fromRDD(rdd).sliding(2).collect()
}
需要一段合理的时间(大约18秒),而当缓存rdd时,需要很长的时间(大约150秒)!这对我来说似乎很奇怪,因为我们应该避免在缓存时做两倍的血统。有人有解释吗?
我将输入文件放在此url