Github user kiszk commented on a diff in the pull request:
https://github.com/apache/spark/pull/21857#discussion_r204743359
--- Diff:
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/generators.scala
---
@@ -222,6 +222,32 @@ case class Stack(children: Seq[Expression]) extends
Generator {
}
}
+/**
+ * Replicate the row N times. N is specified as the first argument to the
function.
+ * This is a internal function solely used by optimizer to rewrite EXCEPT
ALL AND
+ * INTERSECT ALL queries.
+ */
+case class ReplicateRows(children: Seq[Expression]) extends Generator with
CodegenFallback {
+ private lazy val numColumns = children.length - 1 // remove the
multiplier value from output.
+
+ override def elementSchema: StructType =
+ StructType(children.tail.zipWithIndex.map {
+ case (e, index) => StructField(s"col$index", e.dataType)
+ })
+
+ override def eval(input: InternalRow): TraversableOnce[InternalRow] = {
+ val numRows = children.head.eval(input).asInstanceOf[Long]
+ val values = children.tail.map(_.eval(input)).toArray
+ Range.Long(0, numRows, 1).map { i =>
--- End diff --
nit: `i` -> `_`
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]