我正在设法把头放在这两个Spark SQL文档中的功能上。’‘
返回此RDD和另一个的联合。
将具有相同架构的两个RDD的元组合并,并保持重复。
如本SO问题所述,这不是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])
为什么我要一个比另一个更好?
在Spark 1.6中,union删除了上述版本,因此unionAll所有内容都保留了下来。
union
unionAll
在Spark 2.0中,将unionAll其重命名为union,并unionAll为了向后兼容而保留(我想)。
无论如何,union(Spark 2.0)或unionAll(Spark 1.6)都不会进行重复数据删除。