Я новичок в Apache Spark.Что является лучшим или самым легким/эффективным/самым дешевым действием RDD для выполнения на Огромном/большом RDD в Apache Spark
Ниже приведен фрагмент кода, который демонстрирует мой пример кода.
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 х 100000 записей. Подсчитайте на этом rdd держит ресурсы на большое время. Я просто хочу сократить время, которое Count или take приобретает для выполнения задачи. – Sam
Здесь я не вижу сокращения. В любом случае, помимо декартова, передел также является дорогостоящим. Проблема в том, что любое действие, которое вы выполняете, должно будет получить все эти данные. Так будет происходить расчет. –