[jira] [Comment Edited] (SPARK-22296) CodeGenerator - failed to compile when constructor has scala.collection.mutable.Seq vs. scala.collection.Seq

2017-10-20 Thread Randy Tidd (JIRA)

[ 
https://issues.apache.org/jira/browse/SPARK-22296?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16213015#comment-16213015
 ] 

Randy Tidd edited comment on SPARK-22296 at 10/20/17 6:34 PM:
--

Thank you I was just installing 2.2.0 and related components to try this but 
you beat me to it.  Glad to hear it's fixed. Note that the example provided 
above by Liang-Chi Hsieh does not exhibit the problem in 2.1.0 or 2.1.1.


was (Author: tiddman):
Thank you I was just installing 2.2.0 and related components to try this but 
you beat me to it.  Glad to hear it's fixed.

> CodeGenerator - failed to compile when constructor has 
> scala.collection.mutable.Seq vs. scala.collection.Seq
> 
>
> Key: SPARK-22296
> URL: https://issues.apache.org/jira/browse/SPARK-22296
> Project: Spark
>  Issue Type: Bug
>  Components: Optimizer
>Affects Versions: 2.1.0
>Reporter: Randy Tidd
>
> This is with Scala 2.11.
> We have a case class that has a constructor with 85 args, the last two of 
> which are:
>  var chargesInst : 
> scala.collection.mutable.Seq[ChargeInstitutional] = 
> scala.collection.mutable.Seq.empty[ChargeInstitutional],
>  var chargesProf : 
> scala.collection.mutable.Seq[ChargeProfessional] = 
> scala.collection.mutable.Seq.empty[ChargeProfessional]
> A mutable Seq in a the constructor of a case class is probably poor form but 
> Scala allows it.  When we run this job we get this error:
> build   17-Oct-2017 05:30:502017-10-17 09:30:50 [Executor task launch 
> worker-1] ERROR o.a.s.s.c.e.codegen.CodeGenerator - failed to compile: 
> org.codehaus.commons.compiler.CompileException: File 'generated.java', Line 
> 8217, Column 70: No applicable constructor/method found for actual parameters 
> "java.lang.String, java.lang.String, long, java.lang.String, long, long, 
> long, java.lang.String, long, long, double, scala.Option, scala.Option, 
> java.lang.String, java.lang.String, long, java.lang.String, java.lang.String, 
> java.lang.String, java.lang.String, java.lang.String, java.lang.String, int, 
> java.lang.String, java.lang.String, java.lang.String, java.lang.String, 
> java.lang.String, java.lang.String, java.lang.String, java.lang.String, 
> java.lang.String, java.lang.String, long, long, long, long, long, 
> scala.Option, scala.Option, scala.Option, scala.Option, scala.Option, 
> java.lang.String, java.lang.String, java.lang.String, java.lang.String, 
> java.lang.String, java.lang.String, long, java.lang.String, int, double, 
> double, java.lang.String, java.lang.String, java.lang.String, long, 
> java.lang.String, java.lang.String, java.lang.String, java.lang.String, long, 
> long, long, long, java.lang.String, com.xyz.xyz.xyz.domain.Patient, 
> com.xyz.xyz.xyz.domain.Physician, scala.collection.Seq, scala.collection.Seq, 
> java.lang.String, long, java.lang.String, int, int, boolean, boolean, 
> scala.collection.Seq, boolean, scala.collection.Seq, boolean, 
> scala.collection.Seq, scala.collection.Seq"; candidates are: 
> "com.xyz.xyz.xyz.domain.Account(java.lang.String, java.lang.String, long, 
> java.lang.String, long, long, long, java.lang.String, long, long, double, 
> scala.Option, scala.Option, java.lang.String, java.lang.String, long, 
> java.lang.String, java.lang.String, java.lang.String, java.lang.String, 
> java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, 
> java.lang.String, java.lang.String, java.lang.String, java.lang.String, 
> java.lang.String, java.lang.String, java.lang.String, java.lang.String, long, 
> long, long, long, long, scala.Option, scala.Option, scala.Option, 
> scala.Option, scala.Option, java.lang.String, java.lang.String, 
> java.lang.String, java.lang.String, java.lang.String, java.lang.String, long, 
> java.lang.String, int, double, double, java.lang.String, java.lang.String, 
> java.lang.String, long, java.lang.String, java.lang.String, java.lang.String, 
> java.lang.String, long, long, long, long, java.lang.String, 
> com.xyz.xyz.xyz.domain.Patient, com.xyz.xyz.xyz.domain.Physician, 
> scala.collection.Seq, scala.collection.Seq, java.lang.String, long, 
> java.lang.String, int, int, boolean, boolean, scala.collection.Seq, boolean, 
> scala.collection.Seq, boolean, scala.collection.mutable.Seq, 
> scala.collection.mutable.Seq)"
> The relevant lines are:
> build   17-Oct-2017 05:30:50/* 093 */   private scala.collection.Seq 
> argValue84;
> build   17-Oct-2017 05:30:50/* 094 */   private scala.collection.Seq 
> argValue85;
> and
> build   17-Oct-2017 05:30:54/* 8217 */ final 
> com.xyz.xyz.xyz.domain.Account value1 = false ? null : new 
> com.xyz.xyz.xyz.domain.Account(argValue2, argValue3

[jira] [Comment Edited] (SPARK-22296) CodeGenerator - failed to compile when constructor has scala.collection.mutable.Seq vs. scala.collection.Seq

2017-10-20 Thread Randy Tidd (JIRA)

[ 
https://issues.apache.org/jira/browse/SPARK-22296?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16212983#comment-16212983
 ] 

Randy Tidd edited comment on SPARK-22296 at 10/20/17 6:17 PM:
--

The example above does not exhibit the problem.  Here is a concise example that 
does.

Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use 
setLogLevel(newLevel).
17/10/20 14:09:04 WARN NativeCodeLoader: Unable to load native-hadoop library 
for your platform... using builtin-java classes where applicable
17/10/20 14:09:08 WARN ObjectStore: Failed to get database global_temp, 
returning NoSuchObjectException
Spark context Web UI available at http://10.10.43.134:4040
Spark context available as 'sc' (master = local[*], app id = 
local-1508522945163).
Spark session available as 'spark'.
Welcome to
    __
 / __/__  ___ _/ /__
_\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.1.0
  /_/
 
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_131)
Type in expressions to have them evaluated.
Type :help for more information.

scala> case class Foo1(x: Int, s: String, seq: 
scala.collection.mutable.Seq[Int] = scala.collection.mutable.Seq.empty[Int])
defined class Foo1

scala> val ds1 = Seq(Foo1(1, "a"), Foo1(2, "b")).toDS
ds1: org.apache.spark.sql.Dataset[Foo1] = [x: int, s: string ... 1 more field]

scala> 

scala> case class Foo2(x: Int, s: String)
defined class Foo2

scala> val ds2 = Seq(Foo2(1, "aa"), Foo2(3, "cc")).toDS
ds2: org.apache.spark.sql.Dataset[Foo2] = [x: int, s: string]

scala> 

scala> ds1.joinWith(ds2, ds1.col("x") === ds2.col("x")).collect()
17/10/20 14:09:14 ERROR CodeGenerator: failed to compile: 
org.codehaus.commons.compiler.CompileException: File 'generated.java', Line 
263, Column 69: No applicable constructor/method found for actual parameters 
"int, java.lang.String, scala.collection.Seq"; candidates are: 
"$line14.$read$$iw$$iw$Foo1(int, java.lang.String, 
scala.collection.mutable.Seq)"
/* 001 */ public java.lang.Object generate(Object[] references) {
/* 002 */   return new SpecificSafeProjection(references);
/* 003 */ }
/* 004 */
/* 005 */ class SpecificSafeProjection extends 
org.apache.spark.sql.catalyst.expressions.codegen.BaseProjection {
/* 006 */
/* 007 */   private Object[] references;
/* 008 */   private InternalRow mutableRow;
/* 009 */   private $line14.$read$$iw$$iw$Foo1 argValue;
/* 010 */   private $line16.$read$$iw$$iw$Foo2 argValue1;
/* 011 */   private int argValue2;
/* 012 */   private java.lang.String argValue3;
/* 013 */   private scala.collection.Seq argValue4;
/* 014 */   private boolean resultIsNull;
/* 015 */   private java.lang.Object[] argValue5;
/* 016 */   private boolean MapObjects_loopIsNull1;
/* 017 */   private int MapObjects_loopValue0;
/* 018 */   private int argValue6;
/* 019 */   private java.lang.String argValue7;
/* 020 */   private boolean isNull31;
/* 021 */   private boolean value31;
/* 022 */   private boolean isNull32;
/* 023 */   private $line16.$read$$iw$$iw$Foo2 value32;
/* 024 */   private boolean isNull33;
/* 025 */   private $line16.$read$$iw$$iw$Foo2 value33;
/* 026 */
/* 027 */   public SpecificSafeProjection(Object[] references) {
/* 028 */ this.references = references;
/* 029 */ mutableRow = (InternalRow) references[references.length - 1];
/* 030 */
/* 031 */
/* 032 */
/* 033 */
/* 034 */
/* 035 */
/* 036 */
/* 037 */
/* 038 */
/* 039 */
/* 040 */
/* 041 */ isNull31 = false;
/* 042 */ value31 = false;
/* 043 */ isNull32 = false;
/* 044 */ value32 = null;
/* 045 */ isNull33 = false;
/* 046 */ value33 = null;
/* 047 */
/* 048 */   }
/* 049 */
/* 050 */   public void initialize(int partitionIndex) {
/* 051 */
/* 052 */   }
/* 053 */
/* 054 */
/* 055 */   private void evalIfTrueExpr(InternalRow i) {
/* 056 */ final $line16.$read$$iw$$iw$Foo2 value22 = null;
/* 057 */ isNull32 = true;
/* 058 */ value32 = value22;
/* 059 */   }
/* 060 */
/* 061 */
/* 062 */   private void apply_1(InternalRow i) {
/* 063 */
/* 064 */
/* 065 */ resultIsNull = false;
/* 066 */ if (!resultIsNull) {
/* 067 */
/* 068 */   InternalRow value16 = i.getStruct(0, 3);
/* 069 */   boolean isNull15 = false;
/* 070 */   ArrayData value15 = null;
/* 071 */
/* 072 */
/* 073 */   if (value16.isNullAt(2)) {
/* 074 */ isNull15 = true;
/* 075 */   } else {
/* 076 */ value15 = value16.getArray(2);
/* 077 */   }
/* 078 */   ArrayData value14 = null;
/* 079 */
/* 080 */   if (!isNull15) {
/* 081 */
/* 082 */ Integer[] convertedArray = null;
/* 083 */ int dataLength = value15.numElements();
/* 084 */ convertedArray = new Integer[dataLength];
/* 085 */
/*