一尘不染

为什么在SchemaRDDs中,为什么要在Spark中使用.unionAll .unionAll?

sql

我正在设法把头放在这两个Spark
SQL文档
中的功能上。’‘

  • def union(other:RDD [Row]):RDD [Row]

返回此RDD和另一个的联合。

  • def unionAll(otherPlan:SchemaRDD):SchemaRDD

将具有相同架构的两个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])

为什么我要一个比另一个更好?


阅读 111

收藏
2021-05-16

共1个答案

一尘不染

在Spark 1.6中,union删除了上述版本,因此unionAll所有内容都保留了下来。

在Spark 2.0中,将unionAll其重命名为union,并unionAll为了向后兼容而保留(我想)。

无论如何,union(Spark
2.0)
unionAll(Spark
1.6)都
不会进行重复数据删除。

2021-05-16