2
我是Apache Spark的新手。什么是最好的或最轻量级/高效率/最便宜的RDD操作在Apache Spark中的巨大/大型RDD上执行
下面的代码片段这说明我的示例代码。
val x = 5
val arrayVal = (1 to 100000)
val rdd1 = sc.parallelize(arrayVal, x)//Has Huge RDD of Min 10000 to 100000
var rdd2 = rdd1.map(x => (x, x))
rdd2 = rdd2.cache()
rdd2.count()
val cartesianRDD = rdd2.cartesian(rdd2)
var filteredRDD = cartesianRDD.filter(f => (f._1._1 < f._2._1))
filteredRDD = filteredRDD.repartition(x/2)
rdd2 = rdd2.unpersist(false)
filteredRDD.persist(StorageLevel.MEMORY_ONLY)//To avoid re-calculation
filteredRDD.count()
正如我做RDD
这需要多少分钟来算RDD
计数。我想知道什么是最好或最有效/最便宜/最轻量级的方式来触发RDD
转换。
我自己也尝试rdd.take(1)
和rdd.first()
导致相同。
我的最终目标是减少由这些动作所花费的时间。这样可以减少总执行时间。
在此先感谢。
你在这里的目标是什么?任何一种行为都会做笛卡尔这个可能是最耗时的元素。 –
是的。我同意笛卡尔的观点。但在此之后,它会生成100000 x 100000条记录。依靠这个rdd可以保存大量的资源。我只是想减少Count或Take正在获取执行任务的时间。 – Sam
我在这里看不到减少。无论如何,除了笛卡儿之外,重新分配也是昂贵的。问题是您执行的任何操作都必须获取所有这些数据才会进行计算。 –