Sto cercando di avvolgere la mia testa intorno a queste due funzioni in Spark SQL documentation -Perché dovrei .union su .unionAll in Spark for SchemaRDDs?
def unione (altro: RDD [Row]): RDD [Row]
ritorno l'unione di questo RDD e un altro.
def unionAll (otherPlan: SchemaRDD): SchemaRDD
combina le tuple di due RDDs con lo stesso schema, mantenendo i duplicati.
questo non è il comportamento standard di UNION vs UNION ALL, as documented in this SO question.
Il mio codice qui, prendendo in prestito dallo Spark SQL documentation, ha le due funzioni che restituiscono gli stessi risultati.
scala> case class Person(name: String, age: Int)
scala> import org.apache.spark.sql._
scala> val one = sc.parallelize(Array(Person("Alpha",1), Person("Beta",2)))
scala> val two = sc.parallelize(Array(Person("Alpha",1), Person("Beta",2), Person("Gamma", 3)))
scala> val schemaString = "name age"
scala> val schema = StructType(schemaString.split(" ").map(fieldName => StructField(fieldName, StringType, true)))
scala> val peopleSchemaRDD1 = sqlContext.applySchema(one, schema)
scala> val peopleSchemaRDD2 = sqlContext.applySchema(two, schema)
scala> peopleSchemaRDD1.union(peopleSchemaRDD2).collect
res34: Array[org.apache.spark.sql.Row] = Array([Alpha,1], [Beta,2], [Alpha,1], [Beta,2], [Gamma,3])
scala> peopleSchemaRDD1.unionAll(peopleSchemaRDD2).collect
res35: Array[org.apache.spark.sql.Row] = Array([Alpha,1], [Beta,2], [Alpha,1], [Beta,2], [Gamma,3])
Perché preferire uno rispetto all'altro?