apache spark - spark - ¿Hay un "Explicar RDD" en chispa?
rdd significado (1)
En particular, si digo
rdd3 = rdd1.join(rdd2)
luego, cuando llamo a rdd3.collect
, dependiendo del Partitioner
utilizado, cualquiera de los datos se mueve entre las particiones de los nodos, o la unión se realiza localmente en cada partición (o, por lo que sé, otra cosa por completo). Esto depende de lo que el documento RDD denomine dependencias "estrechas" y "amplias", pero quién sabe qué tan bueno es el optimizador en la práctica.
De todos modos, puedo deducir de la salida de rastreo qué cosa realmente sucedió, pero sería bueno llamar a rdd3.explain
.
¿Existe tal cosa?
Creo que toDebugString
apaciguará tu curiosidad.
scala> val data = sc.parallelize(List((1,2)))
data: org.apache.spark.rdd.RDD[(Int, Int)] = ParallelCollectionRDD[8] at parallelize at <console>:21
scala> val joinedData = data join data
joinedData: org.apache.spark.rdd.RDD[(Int, (Int, Int))] = MapPartitionsRDD[11] at join at <console>:23
scala> joinedData.toDebugString
res4: String =
(8) MapPartitionsRDD[11] at join at <console>:23 []
| MapPartitionsRDD[10] at join at <console>:23 []
| CoGroupedRDD[9] at join at <console>:23 []
+-(8) ParallelCollectionRDD[8] at parallelize at <console>:21 []
+-(8) ParallelCollectionRDD[8] at parallelize at <console>:21 []
Cada sangría es una etapa, por lo que debe ejecutarse en dos etapas.
Además, el optimizador es bastante decente, sin embargo, le sugiero que use DataFrames
si está usando 1.3+, ya que el optimizador es incluso mejor en muchos casos :)