Github user viirya commented on a diff in the pull request: https://github.com/apache/spark/pull/18300#discussion_r122649899 --- Diff: sql/core/src/main/scala/org/apache/spark/sql/Dataset.scala --- @@ -1764,6 +1765,58 @@ class Dataset[T] private[sql]( } /** + * Returns a new Dataset containing union of rows in this Dataset and another Dataset. + * + * This is different from both `UNION ALL` and `UNION DISTINCT` in SQL. To do a SQL-style set + * union (that does deduplication of elements), use this function followed by a [[distinct]]. + * + * The difference between this function and [[union]] is that this function + * resolves columns by name (not by position): + * + * {{{ + * val df1 = Seq((1, 2, 3)).toDF("col0", "col1", "col2") + * val df2 = Seq((4, 5, 6)).toDF("col1", "col2", "col0") + * df1.unionByName(df2).show + * + * // output: + * // +----+----+----+ + * // |col0|col1|col2| + * // +----+----+----+ + * // | 1| 2| 3| + * // | 6| 4| 5| + * // +----+----+----+ + * }}} + * + * @group typedrel + * @since 2.3.0 + */ + def unionByName(other: Dataset[T]): Dataset[T] = withSetOperator { + // Creates a `Union` node and resolves it first to reorder output attributes in `other` by name + val unionPlan = sparkSession.sessionState.executePlan(Union(logicalPlan, other.logicalPlan)) --- End diff -- hmm, I mean the case looks like: val df1 = Seq((1, "2", 3.4)).toDF("a", "b", "c") val df2 = Seq((6.7, 4, "5")).toDF("c", "a", "b") And the result is `Row(1, "2", 3.4) :: Row(4, "5", 6.7)`. That's what I guess `unionByName` should do? Forcibly widening the types looks a bit weird for me. Because after the union, the schema is different to original datasets. Or maybe I miss the purpose of this API?
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org