Próbuję owinąć głowę wokół tych dwóch funkcji w Spark SQL documentation -Dlaczego chciałbym .union ponad .unionAll w Spark dla SchemaRDDs?
def Union (inny: RDD [Wiersz]): RDD [Wiersz]
Return unii ten RDD i inny.
def unionAll (otherPlan: SchemaRDD) SchemaRDD
Łączy krotki dwóch ZOPS z tym samym schematem, utrzymując duplikatów.
To nie jest standardowe zachowanie UNION vs UNION ALL, as documented in this SO question.
Mój kod tutaj, pożyczając od Spark SQL documentation, ma dwie funkcje zwracające takie same wyniki.
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])
Dlaczego miałbym preferować jeden nad drugim?