Я пытаюсь обойти эти две функции в Документация по Spark SQL -
def union (other: RDD [Row]): RDD [Row]
Верните объединение этого RDD и другого.
def unionAll (otherPlan: SchemaRDD): SchemaRDD
Объединяет кортежи двух RDD с одной и той же схемой, сохраняя дубликаты.
Это не стандартное поведение UNION vs UNION ALL, , как описано в этом ТАК вопросе.
Мой код здесь заимствован из документации Spark SQL, две функции возвращают одинаковые результаты.
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])
Почему я предпочитаю одно другому?