You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@spark.apache.org by maropu <gi...@git.apache.org> on 2018/09/06 14:57:15 UTC

[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

GitHub user maropu opened a pull request:

    https://github.com/apache/spark/pull/22355

    [SPARK-25358][SQL] MutableProjection supports fallback to an interpreted mode

    ## What changes were proposed in this pull request?
    In SPARK-23711, `UnsafeProjection` supports fallback to an interpreted mode. Therefore, this pr fixed code to support the same fallback mode in `MutableProjection` based on `CodeGeneratorWithInterpretedFallback`.
    
    ## How was this patch tested?
    Added tests in `CodeGeneratorWithInterpretedFallbackSuite`.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/maropu/spark SPARK-25358

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/spark/pull/22355.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #22355
    
----
commit c25c4269f6127b445208c752ddadcc23ae77a578
Author: Takeshi Yamamuro <ya...@...>
Date:   2018-09-06T14:48:04Z

    Fix

----


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #96103 has finished](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/96103/testReport)** for PR 22355 at commit [`76ca370`](https://github.com/apache/spark/commit/76ca37075398f890d19775e0037cb92072af53d2).
     * This patch passes all tests.
     * This patch merges cleanly.
     * This patch adds the following public classes _(experimental)_:
      * `class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection `
      * `abstract class MutableProjection extends Projection `


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by sadhen <gi...@git.apache.org>.
Github user sadhen commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r215862272
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/InterpretedMutableProjection.scala ---
    @@ -0,0 +1,83 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *    http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.spark.sql.catalyst.expressions
    +
    +import org.apache.spark.sql.catalyst.InternalRow
    +
    +
    +/**
    + * A [[MutableProjection]] that is calculated by calling `eval` on each of the specified
    + * expressions.
    + *
    + * @param expressions a sequence of expressions that determine the value of each column of the
    + *                    output row.
    + */
    +class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection {
    +  def this(expressions: Seq[Expression], inputSchema: Seq[Attribute]) =
    +    this(expressions.map(BindReferences.bindReference(_, inputSchema)))
    +
    +  private[this] val buffer = new Array[Any](expressions.size)
    +
    +  override def initialize(partitionIndex: Int): Unit = {
    +    expressions.foreach(_.foreach {
    +      case n: Nondeterministic => n.initialize(partitionIndex)
    +      case _ =>
    +    })
    +  }
    +
    +  private[this] val exprArray = expressions.toArray
    +  private[this] var mutableRow: InternalRow = new GenericInternalRow(exprArray.length)
    +  def currentValue: InternalRow = mutableRow
    +
    +  override def target(row: InternalRow): MutableProjection = {
    +    mutableRow = row
    +    this
    +  }
    +
    +  override def apply(input: InternalRow): InternalRow = {
    +    var i = 0
    +    while (i < exprArray.length) {
    +      // Store the result into buffer first, to make the projection atomic (needed by aggregation)
    +      buffer(i) = exprArray(i).eval(input)
    +      i += 1
    +    }
    +    i = 0
    +    while (i < exprArray.length) {
    +      mutableRow(i) = buffer(i)
    +      i += 1
    +    }
    +    mutableRow
    +  }
    +}
    --- End diff --
    
    The improvement (written 3 months ago) is based on the generated Java code.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test FAILed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #96102 has started](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/96102/testReport)** for PR 22355 at commit [`f23705c`](https://github.com/apache/spark/commit/f23705cd8f214ffbda74a78a1c503c409ee7801f).


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by hvanhovell <gi...@git.apache.org>.
Github user hvanhovell commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r217841164
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/InterpretedMutableProjection.scala ---
    @@ -0,0 +1,83 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *    http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.spark.sql.catalyst.expressions
    +
    +import org.apache.spark.sql.catalyst.InternalRow
    +import org.apache.spark.sql.catalyst.expressions.aggregate.NoOp
    +
    +
    +/**
    + * A [[MutableProjection]] that is calculated by calling `eval` on each of the specified
    + * expressions.
    + *
    + * @param expressions a sequence of expressions that determine the value of each column of the
    + *                    output row.
    + */
    +class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection {
    +  def this(expressions: Seq[Expression], inputSchema: Seq[Attribute]) =
    +    this(toBoundExprs(expressions, inputSchema))
    +
    +  private[this] val buffer = new Array[Any](expressions.size)
    +
    +  override def initialize(partitionIndex: Int): Unit = {
    +    expressions.foreach(_.foreach {
    +      case n: Nondeterministic => n.initialize(partitionIndex)
    +      case _ =>
    +    })
    +  }
    +
    +  private[this] val validExprs = expressions.zipWithIndex.filter {
    +    case (NoOp, _) => false
    +    case _ => true
    +  }
    +  private[this] var mutableRow: InternalRow = new GenericInternalRow(expressions.size)
    +  def currentValue: InternalRow = mutableRow
    +
    +  override def target(row: InternalRow): MutableProjection = {
    +    mutableRow = row
    +    this
    +  }
    +
    +  override def apply(input: InternalRow): InternalRow = {
    +    validExprs.foreach { case (expr, i) =>
    --- End diff --
    
    Can you please use the old code? That should be much more performant that this.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test FAILed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/95781/
    Test FAILed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #95989 has started](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/95989/testReport)** for PR 22355 at commit [`9b4f64d`](https://github.com/apache/spark/commit/9b4f64d0382c2b0341251405a7a44557beedbcaa).


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution-unified/3158/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by maropu <gi...@git.apache.org>.
Github user maropu commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r216114653
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/InterpretedMutableProjection.scala ---
    @@ -0,0 +1,83 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *    http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.spark.sql.catalyst.expressions
    +
    +import org.apache.spark.sql.catalyst.InternalRow
    +
    +
    +/**
    + * A [[MutableProjection]] that is calculated by calling `eval` on each of the specified
    + * expressions.
    + *
    + * @param expressions a sequence of expressions that determine the value of each column of the
    + *                    output row.
    + */
    +class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection {
    +  def this(expressions: Seq[Expression], inputSchema: Seq[Attribute]) =
    +    this(expressions.map(BindReferences.bindReference(_, inputSchema)))
    +
    +  private[this] val buffer = new Array[Any](expressions.size)
    +
    +  override def initialize(partitionIndex: Int): Unit = {
    +    expressions.foreach(_.foreach {
    +      case n: Nondeterministic => n.initialize(partitionIndex)
    +      case _ =>
    +    })
    +  }
    +
    +  private[this] val exprArray = expressions.toArray
    +  private[this] var mutableRow: InternalRow = new GenericInternalRow(exprArray.length)
    +  def currentValue: InternalRow = mutableRow
    +
    +  override def target(row: InternalRow): MutableProjection = {
    +    mutableRow = row
    +    this
    +  }
    +
    +  override def apply(input: InternalRow): InternalRow = {
    +    var i = 0
    +    while (i < exprArray.length) {
    +      // Store the result into buffer first, to make the projection atomic (needed by aggregation)
    +      buffer(i) = exprArray(i).eval(input)
    +      i += 1
    +    }
    +    i = 0
    +    while (i < exprArray.length) {
    +      mutableRow(i) = buffer(i)
    +      i += 1
    +    }
    +    mutableRow
    +  }
    +}
    --- End diff --
    
    The change seems to look good to me though, I'ld like to address performance and code quality issues in follow-ups. cc: @gatorsmile 


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by cloud-fan <gi...@git.apache.org>.
Github user cloud-fan commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r217054661
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/CodeGeneratorWithInterpretedFallback.scala ---
    @@ -37,19 +37,22 @@ object CodegenObjectFactoryMode extends Enumeration {
      */
     abstract class CodeGeneratorWithInterpretedFallback[IN, OUT] extends Logging {
     
    -  def createObject(in: IN): OUT = {
    +  def createObject(in: IN): OUT =
    +    createObject(in, subexpressionEliminationEnabled = false)
    --- End diff --
    
    Can we eliminate it? I think we can use `SQLConf.get` directly when we need to access the conf. This should be done in a different PR though.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution-unified/3044/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/95991/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #95991 has finished](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/95991/testReport)** for PR 22355 at commit [`53789f7`](https://github.com/apache/spark/commit/53789f7dca484668d9b2a57597d2fc7916e80fd5).
     * This patch passes all tests.
     * This patch merges cleanly.
     * This patch adds no public classes.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution-unified/2925/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by maropu <gi...@git.apache.org>.
Github user maropu commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r217058960
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/CodeGeneratorWithInterpretedFallback.scala ---
    @@ -37,19 +37,22 @@ object CodegenObjectFactoryMode extends Enumeration {
      */
     abstract class CodeGeneratorWithInterpretedFallback[IN, OUT] extends Logging {
     
    -  def createObject(in: IN): OUT = {
    +  def createObject(in: IN): OUT =
    +    createObject(in, subexpressionEliminationEnabled = false)
    --- End diff --
    
    ah, it might be yes. I'll check in follow-up.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by maropu <gi...@git.apache.org>.
Github user maropu commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Thanks for the merging!


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/95793/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #95988 has finished](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/95988/testReport)** for PR 22355 at commit [`d60ea38`](https://github.com/apache/spark/commit/d60ea38c6ffe877f6db301950df568816ab5e3d9).
     * This patch **fails to build**.
     * This patch merges cleanly.
     * This patch adds no public classes.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #95989 has finished](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/95989/testReport)** for PR 22355 at commit [`9b4f64d`](https://github.com/apache/spark/commit/9b4f64d0382c2b0341251405a7a44557beedbcaa).
     * This patch passes all tests.
     * This patch merges cleanly.
     * This patch adds no public classes.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #96101 has started](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/96101/testReport)** for PR 22355 at commit [`b1c6e86`](https://github.com/apache/spark/commit/b1c6e86e06c8d1e80af5d8bc6a3f1a6e08fa0026).


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by maropu <gi...@git.apache.org>.
Github user maropu commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r215659345
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Projection.scala ---
    @@ -178,15 +236,7 @@ object UnsafeProjection
           exprs: Seq[Expression],
           inputSchema: Seq[Attribute],
           subexpressionEliminationEnabled: Boolean): UnsafeProjection = {
    -    val unsafeExprs = toUnsafeExprs(toBoundExprs(exprs, inputSchema))
    -    try {
    -      GenerateUnsafeProjection.generate(unsafeExprs, subexpressionEliminationEnabled)
    -    } catch {
    -      case NonFatal(_) =>
    -        // We should have already seen the error message in `CodeGenerator`
    -        logWarning("Expr codegen error and falling back to interpreter mode")
    -        InterpretedUnsafeProjection.createProjection(unsafeExprs)
    -    }
    +    createObject(toUnsafeExprs(toBoundExprs(exprs, inputSchema)), subexpressionEliminationEnabled)
    --- End diff --
    
    Removed the duplicated fallback logic here and reused the logic of `CodeGeneratorWithInterpretedFallback`.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by maropu <gi...@git.apache.org>.
Github user maropu commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    cc: @gatorsmile @rednaxelafx Could you check again and merge?


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by maropu <gi...@git.apache.org>.
Github user maropu commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r218042119
  
    --- Diff: sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGeneratorWithInterpretedFallbackSuite.scala ---
    @@ -69,11 +85,26 @@ class CodeGeneratorWithInterpretedFallbackSuite extends SparkFunSuite with PlanT
       test("codegen failures in the CODEGEN_ONLY mode") {
         val errMsg = intercept[ExecutionException] {
           val input = Seq(BoundReference(0, IntegerType, nullable = true))
    -      val codegenOnly = CodegenObjectFactoryMode.CODEGEN_ONLY.toString
           withSQLConf(SQLConf.CODEGEN_FACTORY_MODE.key -> codegenOnly) {
             FailedCodegenProjection.createObject(input)
           }
    +      val noCodegen = CodegenObjectFactoryMode.NO_CODEGEN.toString
    --- End diff --
    
    oh.. yes. I'll remove.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by cloud-fan <gi...@git.apache.org>.
Github user cloud-fan commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    thanks, merging to master!


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by kiszk <gi...@git.apache.org>.
Github user kiszk commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    retest this please


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #95765 has finished](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/95765/testReport)** for PR 22355 at commit [`c25c426`](https://github.com/apache/spark/commit/c25c4269f6127b445208c752ddadcc23ae77a578).
     * This patch passes all tests.
     * This patch merges cleanly.
     * This patch adds the following public classes _(experimental)_:
      * `abstract class MutableProjection extends Projection `


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #96102 has finished](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/96102/testReport)** for PR 22355 at commit [`f23705c`](https://github.com/apache/spark/commit/f23705cd8f214ffbda74a78a1c503c409ee7801f).
     * This patch passes all tests.
     * This patch merges cleanly.
     * This patch adds the following public classes _(experimental)_:
      * `class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection `
      * `abstract class MutableProjection extends Projection `


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #96134 has finished](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/96134/testReport)** for PR 22355 at commit [`8749173`](https://github.com/apache/spark/commit/87491732e1473880077daf9ce5c080845f4742e1).
     * This patch passes all tests.
     * This patch merges cleanly.
     * This patch adds no public classes.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by maropu <gi...@git.apache.org>.
Github user maropu commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    @sadhen aha, I see. yea, we might need to address it in this pr.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by asfgit <gi...@git.apache.org>.
Github user asfgit closed the pull request at:

    https://github.com/apache/spark/pull/22355


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by maropu <gi...@git.apache.org>.
Github user maropu commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r217242015
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/CodeGeneratorWithInterpretedFallback.scala ---
    @@ -37,19 +37,22 @@ object CodegenObjectFactoryMode extends Enumeration {
      */
     abstract class CodeGeneratorWithInterpretedFallback[IN, OUT] extends Logging {
     
    -  def createObject(in: IN): OUT = {
    +  def createObject(in: IN): OUT =
    +    createObject(in, subexpressionEliminationEnabled = false)
    --- End diff --
    
    ok, I'll do that first in another pr.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by maropu <gi...@git.apache.org>.
Github user maropu commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    ping


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by cloud-fan <gi...@git.apache.org>.
Github user cloud-fan commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r217241810
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/CodeGeneratorWithInterpretedFallback.scala ---
    @@ -37,19 +37,22 @@ object CodegenObjectFactoryMode extends Enumeration {
      */
     abstract class CodeGeneratorWithInterpretedFallback[IN, OUT] extends Logging {
     
    -  def createObject(in: IN): OUT = {
    +  def createObject(in: IN): OUT =
    +    createObject(in, subexpressionEliminationEnabled = false)
    --- End diff --
    
    I took some more look, seems it's not an actual config, but just a method parameter. Maybe we should remove this config in 3.0.
    
    that said, let's keep your PR as it is.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution-unified/3047/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test FAILed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/95988/
    Test FAILed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #96103 has started](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/96103/testReport)** for PR 22355 at commit [`76ca370`](https://github.com/apache/spark/commit/76ca37075398f890d19775e0037cb92072af53d2).


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #95793 has finished](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/95793/testReport)** for PR 22355 at commit [`1ffeca7`](https://github.com/apache/spark/commit/1ffeca7020b13667729791410a1a4eceb24302a6).
     * This patch passes all tests.
     * This patch merges cleanly.
     * This patch adds the following public classes _(experimental)_:
      * `class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection `


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #95793 has started](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/95793/testReport)** for PR 22355 at commit [`1ffeca7`](https://github.com/apache/spark/commit/1ffeca7020b13667729791410a1a4eceb24302a6).


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by cloud-fan <gi...@git.apache.org>.
Github user cloud-fan commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    So the next step is, create a `Predicate` factory with fallback?


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/96103/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution-unified/3133/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by rednaxelafx <gi...@git.apache.org>.
Github user rednaxelafx commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    LGTM as well.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by maropu <gi...@git.apache.org>.
Github user maropu commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Thanks for your review, kirs! I'll update in a day.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/95765/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution-unified/3132/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by rednaxelafx <gi...@git.apache.org>.
Github user rednaxelafx commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r216524666
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/package.scala ---
    @@ -86,24 +86,12 @@ package object expressions  {
       }
     
       /**
    -   * Converts a [[InternalRow]] to another Row given a sequence of expression that define each
    -   * column of the new row. If the schema of the input row is specified, then the given expression
    -   * will be bound to that schema.
    -   *
    -   * In contrast to a normal projection, a MutableProjection reuses the same underlying row object
    -   * each time an input row is added.  This significantly reduces the cost of calculating the
    -   * projection, but means that it is not safe to hold on to a reference to a [[InternalRow]] after
    -   * `next()` has been called on the [[Iterator]] that produced it. Instead, the user must call
    -   * `InternalRow.copy()` and hold on to the returned [[InternalRow]] before calling `next()`.
    +   * A helper function to bound given expressions to an input schema.
    --- End diff --
    
    Spelling nitpick: s/bound/bind/


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test FAILed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution-unified/2917/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by maropu <gi...@git.apache.org>.
Github user maropu commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r217860646
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/InterpretedMutableProjection.scala ---
    @@ -0,0 +1,83 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *    http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.spark.sql.catalyst.expressions
    +
    +import org.apache.spark.sql.catalyst.InternalRow
    +import org.apache.spark.sql.catalyst.expressions.aggregate.NoOp
    +
    +
    +/**
    + * A [[MutableProjection]] that is calculated by calling `eval` on each of the specified
    + * expressions.
    + *
    + * @param expressions a sequence of expressions that determine the value of each column of the
    + *                    output row.
    + */
    +class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection {
    +  def this(expressions: Seq[Expression], inputSchema: Seq[Attribute]) =
    +    this(toBoundExprs(expressions, inputSchema))
    +
    +  private[this] val buffer = new Array[Any](expressions.size)
    +
    +  override def initialize(partitionIndex: Int): Unit = {
    +    expressions.foreach(_.foreach {
    +      case n: Nondeterministic => n.initialize(partitionIndex)
    +      case _ =>
    +    })
    +  }
    +
    +  private[this] val validExprs = expressions.zipWithIndex.filter {
    +    case (NoOp, _) => false
    +    case _ => true
    +  }
    +  private[this] var mutableRow: InternalRow = new GenericInternalRow(expressions.size)
    +  def currentValue: InternalRow = mutableRow
    +
    +  override def target(row: InternalRow): MutableProjection = {
    +    mutableRow = row
    +    this
    +  }
    +
    +  override def apply(input: InternalRow): InternalRow = {
    +    validExprs.foreach { case (expr, i) =>
    --- End diff --
    
    oh, I forgot that we should do that in performance-sensitive places... Thanks! I'll update.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #95781 has started](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/95781/testReport)** for PR 22355 at commit [`1ffeca7`](https://github.com/apache/spark/commit/1ffeca7020b13667729791410a1a4eceb24302a6).


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #95781 has finished](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/95781/testReport)** for PR 22355 at commit [`1ffeca7`](https://github.com/apache/spark/commit/1ffeca7020b13667729791410a1a4eceb24302a6).
     * This patch **fails due to an unknown error code, -9**.
     * This patch merges cleanly.
     * This patch adds the following public classes _(experimental)_:
      * `class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection `


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by cloud-fan <gi...@git.apache.org>.
Github user cloud-fan commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    LGTM.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #96101 has finished](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/96101/testReport)** for PR 22355 at commit [`b1c6e86`](https://github.com/apache/spark/commit/b1c6e86e06c8d1e80af5d8bc6a3f1a6e08fa0026).
     * This patch passes all tests.
     * This patch **does not merge cleanly**.
     * This patch adds the following public classes _(experimental)_:
      * `class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection `
      * `abstract class MutableProjection extends Projection `


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution-unified/2907/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by maropu <gi...@git.apache.org>.
Github user maropu commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r217017120
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/InterpretedMutableProjection.scala ---
    @@ -0,0 +1,83 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *    http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.spark.sql.catalyst.expressions
    +
    +import org.apache.spark.sql.catalyst.InternalRow
    +
    +
    +/**
    + * A [[MutableProjection]] that is calculated by calling `eval` on each of the specified
    + * expressions.
    + *
    + * @param expressions a sequence of expressions that determine the value of each column of the
    + *                    output row.
    + */
    +class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection {
    +  def this(expressions: Seq[Expression], inputSchema: Seq[Attribute]) =
    +    this(expressions.map(toBoundExprs(_, inputSchema)))
    --- End diff --
    
    yea, haha. I've already updated!


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/96134/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by sadhen <gi...@git.apache.org>.
Github user sadhen commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r216116648
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/InterpretedMutableProjection.scala ---
    @@ -0,0 +1,83 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *    http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.spark.sql.catalyst.expressions
    +
    +import org.apache.spark.sql.catalyst.InternalRow
    +
    +
    +/**
    + * A [[MutableProjection]] that is calculated by calling `eval` on each of the specified
    + * expressions.
    + *
    + * @param expressions a sequence of expressions that determine the value of each column of the
    + *                    output row.
    + */
    +class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection {
    +  def this(expressions: Seq[Expression], inputSchema: Seq[Attribute]) =
    +    this(expressions.map(BindReferences.bindReference(_, inputSchema)))
    +
    +  private[this] val buffer = new Array[Any](expressions.size)
    +
    +  override def initialize(partitionIndex: Int): Unit = {
    +    expressions.foreach(_.foreach {
    +      case n: Nondeterministic => n.initialize(partitionIndex)
    +      case _ =>
    +    })
    +  }
    +
    +  private[this] val exprArray = expressions.toArray
    +  private[this] var mutableRow: InternalRow = new GenericInternalRow(exprArray.length)
    +  def currentValue: InternalRow = mutableRow
    +
    +  override def target(row: InternalRow): MutableProjection = {
    +    mutableRow = row
    +    this
    +  }
    +
    +  override def apply(input: InternalRow): InternalRow = {
    +    var i = 0
    +    while (i < exprArray.length) {
    +      // Store the result into buffer first, to make the projection atomic (needed by aggregation)
    +      buffer(i) = exprArray(i).eval(input)
    +      i += 1
    +    }
    +    i = 0
    +    while (i < exprArray.length) {
    +      mutableRow(i) = buffer(i)
    +      i += 1
    +    }
    +    mutableRow
    +  }
    +}
    --- End diff --
    
    Should be easy to create a test case.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by sadhen <gi...@git.apache.org>.
Github user sadhen commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    @maropu there are tips to view the codegen:
    
    > spark.sql("explain codegen select 1 + 1").show(false)
    
    You may explain an aggregation, and the NoOp check is obvious.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/96101/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/96102/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by rednaxelafx <gi...@git.apache.org>.
Github user rednaxelafx commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r216525084
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/InterpretedMutableProjection.scala ---
    @@ -0,0 +1,83 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *    http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.spark.sql.catalyst.expressions
    +
    +import org.apache.spark.sql.catalyst.InternalRow
    +
    +
    +/**
    + * A [[MutableProjection]] that is calculated by calling `eval` on each of the specified
    + * expressions.
    + *
    + * @param expressions a sequence of expressions that determine the value of each column of the
    + *                    output row.
    + */
    +class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection {
    +  def this(expressions: Seq[Expression], inputSchema: Seq[Attribute]) =
    +    this(expressions.map(BindReferences.bindReference(_, inputSchema)))
    --- End diff --
    
    use `toBoundExpr`?


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution-unified/3131/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #96134 has started](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/96134/testReport)** for PR 22355 at commit [`8749173`](https://github.com/apache/spark/commit/87491732e1473880077daf9ce5c080845f4742e1).


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #95988 has started](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/95988/testReport)** for PR 22355 at commit [`d60ea38`](https://github.com/apache/spark/commit/d60ea38c6ffe877f6db301950df568816ab5e3d9).


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #95991 has started](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/95991/testReport)** for PR 22355 at commit [`53789f7`](https://github.com/apache/spark/commit/53789f7dca484668d9b2a57597d2fc7916e80fd5).


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by kiszk <gi...@git.apache.org>.
Github user kiszk commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r215897598
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/InterpretedMutableProjection.scala ---
    @@ -0,0 +1,83 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *    http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.spark.sql.catalyst.expressions
    +
    +import org.apache.spark.sql.catalyst.InternalRow
    +
    +
    +/**
    + * A [[MutableProjection]] that is calculated by calling `eval` on each of the specified
    + * expressions.
    + *
    + * @param expressions a sequence of expressions that determine the value of each column of the
    + *                    output row.
    + */
    +class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection {
    +  def this(expressions: Seq[Expression], inputSchema: Seq[Attribute]) =
    +    this(expressions.map(BindReferences.bindReference(_, inputSchema)))
    +
    +  private[this] val buffer = new Array[Any](expressions.size)
    +
    +  override def initialize(partitionIndex: Int): Unit = {
    +    expressions.foreach(_.foreach {
    +      case n: Nondeterministic => n.initialize(partitionIndex)
    +      case _ =>
    +    })
    +  }
    +
    +  private[this] val exprArray = expressions.toArray
    +  private[this] var mutableRow: InternalRow = new GenericInternalRow(exprArray.length)
    +  def currentValue: InternalRow = mutableRow
    +
    +  override def target(row: InternalRow): MutableProjection = {
    +    mutableRow = row
    +    this
    +  }
    +
    +  override def apply(input: InternalRow): InternalRow = {
    +    var i = 0
    +    while (i < exprArray.length) {
    +      // Store the result into buffer first, to make the projection atomic (needed by aggregation)
    +      buffer(i) = exprArray(i).eval(input)
    +      i += 1
    +    }
    +    i = 0
    +    while (i < exprArray.length) {
    +      mutableRow(i) = buffer(i)
    +      i += 1
    +    }
    +    mutableRow
    +  }
    +}
    --- End diff --
    
    Looks good point. Do you know whether there is a test cause that causes the exception with the interpreted one?  



---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by SparkQA <gi...@git.apache.org>.
Github user SparkQA commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    **[Test build #95765 has started](https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/95765/testReport)** for PR 22355 at commit [`c25c426`](https://github.com/apache/spark/commit/c25c4269f6127b445208c752ddadcc23ae77a578).


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by maropu <gi...@git.apache.org>.
Github user maropu commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Can you check? @gatorsmile @rednaxelafx @cloud-fan @viirya 


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by sadhen <gi...@git.apache.org>.
Github user sadhen commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r215859282
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/InterpretedMutableProjection.scala ---
    @@ -0,0 +1,83 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *    http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.spark.sql.catalyst.expressions
    +
    +import org.apache.spark.sql.catalyst.InternalRow
    +
    +
    +/**
    + * A [[MutableProjection]] that is calculated by calling `eval` on each of the specified
    + * expressions.
    + *
    + * @param expressions a sequence of expressions that determine the value of each column of the
    + *                    output row.
    + */
    +class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection {
    +  def this(expressions: Seq[Expression], inputSchema: Seq[Attribute]) =
    +    this(expressions.map(BindReferences.bindReference(_, inputSchema)))
    +
    +  private[this] val buffer = new Array[Any](expressions.size)
    +
    +  override def initialize(partitionIndex: Int): Unit = {
    +    expressions.foreach(_.foreach {
    +      case n: Nondeterministic => n.initialize(partitionIndex)
    +      case _ =>
    +    })
    +  }
    +
    +  private[this] val exprArray = expressions.toArray
    +  private[this] var mutableRow: InternalRow = new GenericInternalRow(exprArray.length)
    +  def currentValue: InternalRow = mutableRow
    +
    +  override def target(row: InternalRow): MutableProjection = {
    +    mutableRow = row
    +    this
    +  }
    +
    +  override def apply(input: InternalRow): InternalRow = {
    +    var i = 0
    +    while (i < exprArray.length) {
    +      // Store the result into buffer first, to make the projection atomic (needed by aggregation)
    +      buffer(i) = exprArray(i).eval(input)
    +      i += 1
    +    }
    +    i = 0
    +    while (i < exprArray.length) {
    +      mutableRow(i) = buffer(i)
    +      i += 1
    +    }
    +    mutableRow
    +  }
    +}
    --- End diff --
    
    This is my improved version of InterpretedMutableProject:
    
    ```
      override def apply(input: InternalRow): InternalRow = {
        var i = 0
        while (i < exprArray.length) {
          // Store the result into buffer first, to make the projection atomic (needed by aggregation)
          if (exprArray(i) != NoOp) {
            buffer(i) = exprArray(i).eval(input)
          }
          i += 1
        }
        i = 0
        while (i < exprArray.length) {
          if (exprArray(i) != NoOp) {
            mutableRow(i) = buffer(i)
          }
          i += 1
        }
        mutableRow
      }
    ```
    
    The AggregationIterator uses NoOp. If you replace the codegen one with the interpreted one. You will encounter an exception from `NoOp.eval`.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution-unified/3045/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Test PASSed.
    Refer to this link for build results (access rights to CI server needed): 
    https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/95989/
    Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by rednaxelafx <gi...@git.apache.org>.
Github user rednaxelafx commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r217016675
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/InterpretedMutableProjection.scala ---
    @@ -0,0 +1,83 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *    http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.spark.sql.catalyst.expressions
    +
    +import org.apache.spark.sql.catalyst.InternalRow
    +
    +
    +/**
    + * A [[MutableProjection]] that is calculated by calling `eval` on each of the specified
    + * expressions.
    + *
    + * @param expressions a sequence of expressions that determine the value of each column of the
    + *                    output row.
    + */
    +class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection {
    +  def this(expressions: Seq[Expression], inputSchema: Seq[Attribute]) =
    +    this(expressions.map(toBoundExprs(_, inputSchema)))
    --- End diff --
    
    ```
    [error] /home/jenkins/workspace/SparkPullRequestBuilder@2/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/InterpretedMutableProjection.scala:32: type mismatch;
    [error]  found   : org.apache.spark.sql.catalyst.expressions.Expression
    [error]  required: Seq[org.apache.spark.sql.catalyst.expressions.Expression]
    [error]     this(expressions.map(toBoundExprs(_, inputSchema)))
    [error]                                       ^
    ```
    
    It's probably `this(toBoundExprs(expressions, inputSchema))` right?


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by cloud-fan <gi...@git.apache.org>.
Github user cloud-fan commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r217233868
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/CodeGeneratorWithInterpretedFallback.scala ---
    @@ -37,19 +37,22 @@ object CodegenObjectFactoryMode extends Enumeration {
      */
     abstract class CodeGeneratorWithInterpretedFallback[IN, OUT] extends Logging {
     
    -  def createObject(in: IN): OUT = {
    +  def createObject(in: IN): OUT =
    +    createObject(in, subexpressionEliminationEnabled = false)
    --- End diff --
    
    can we do that first? I think that will be a small change and can also make this PR simpler and easier to review.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by cloud-fan <gi...@git.apache.org>.
Github user cloud-fan commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r218041490
  
    --- Diff: sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGeneratorWithInterpretedFallbackSuite.scala ---
    @@ -69,11 +85,26 @@ class CodeGeneratorWithInterpretedFallbackSuite extends SparkFunSuite with PlanT
       test("codegen failures in the CODEGEN_ONLY mode") {
         val errMsg = intercept[ExecutionException] {
           val input = Seq(BoundReference(0, IntegerType, nullable = true))
    -      val codegenOnly = CodegenObjectFactoryMode.CODEGEN_ONLY.toString
           withSQLConf(SQLConf.CODEGEN_FACTORY_MODE.key -> codegenOnly) {
             FailedCodegenProjection.createObject(input)
           }
    +      val noCodegen = CodegenObjectFactoryMode.NO_CODEGEN.toString
    --- End diff --
    
    unnecessary line?


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by maropu <gi...@git.apache.org>.
Github user maropu commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    yea, we should do. Before that, I was thinking I would work on fallback for 
    `SafeProjection` (https://issues.apache.org/jira/browse/SPARK-25374).


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark issue #22355: [SPARK-25358][SQL] MutableProjection supports fallback t...

Posted by AmplabJenkins <gi...@git.apache.org>.
Github user AmplabJenkins commented on the issue:

    https://github.com/apache/spark/pull/22355
  
    Merged build finished. Test PASSed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org


[GitHub] spark pull request #22355: [SPARK-25358][SQL] MutableProjection supports fal...

Posted by rednaxelafx <gi...@git.apache.org>.
Github user rednaxelafx commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22355#discussion_r216526434
  
    --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/InterpretedMutableProjection.scala ---
    @@ -0,0 +1,83 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *    http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.spark.sql.catalyst.expressions
    +
    +import org.apache.spark.sql.catalyst.InternalRow
    +
    +
    +/**
    + * A [[MutableProjection]] that is calculated by calling `eval` on each of the specified
    + * expressions.
    + *
    + * @param expressions a sequence of expressions that determine the value of each column of the
    + *                    output row.
    + */
    +class InterpretedMutableProjection(expressions: Seq[Expression]) extends MutableProjection {
    +  def this(expressions: Seq[Expression], inputSchema: Seq[Attribute]) =
    +    this(expressions.map(BindReferences.bindReference(_, inputSchema)))
    +
    +  private[this] val buffer = new Array[Any](expressions.size)
    +
    +  override def initialize(partitionIndex: Int): Unit = {
    +    expressions.foreach(_.foreach {
    +      case n: Nondeterministic => n.initialize(partitionIndex)
    +      case _ =>
    +    })
    +  }
    +
    +  private[this] val exprArray = expressions.toArray
    +  private[this] var mutableRow: InternalRow = new GenericInternalRow(exprArray.length)
    +  def currentValue: InternalRow = mutableRow
    +
    +  override def target(row: InternalRow): MutableProjection = {
    +    mutableRow = row
    +    this
    +  }
    +
    +  override def apply(input: InternalRow): InternalRow = {
    +    var i = 0
    +    while (i < exprArray.length) {
    +      // Store the result into buffer first, to make the projection atomic (needed by aggregation)
    +      buffer(i) = exprArray(i).eval(input)
    +      i += 1
    +    }
    +    i = 0
    +    while (i < exprArray.length) {
    +      mutableRow(i) = buffer(i)
    +      i += 1
    +    }
    +    mutableRow
    +  }
    +}
    --- End diff --
    
    +1 on the check for `NoOp`s.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org