gpt4 book ai didi

sql - 为什么我想要 .union 而不是 .unionAll 在 Spark 中用于 SchemaRDD?

转载 作者:行者123 更新时间:2023-12-04 00:05:04 28 4
gpt4 key购买 nike

我正试图围绕 Spark SQL documentation 中的这两个函数进行思考。 ——

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

    返回此 RDD 和另一个 RDD 的并集。
  • def unionAll(otherPlan: SchemaRDD): SchemaRDD

    将具有相同模式的两个 RDD 的元组组合在一起,保留重复项。

  • 这不是 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])

    为什么我更喜欢一个?

    最佳答案

    在 Spark 1.6 中,union 以上版本被移除,所以 unionAll剩下的就是全部了。

    在 Spark 2.0 中,unionAll更名为 union , 与 unionAll保持向后兼容性(我猜)。

    在任何情况下,都不会在 union (Spark 2.0) 中进行重复数据删除。或 unionAll (Spark 1.6) .

    关于sql - 为什么我想要 .union 而不是 .unionAll 在 Spark 中用于 SchemaRDD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29022530/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com