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