[ https://issues.apache.org/jira/browse/SYSTEMML-1279?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Deron Eriksson resolved SYSTEMML-1279. -------------------------------------- Resolution: Fixed Fix Version/s: SystemML 0.13 > EOFException in MinMaxMean example snippet > ------------------------------------------ > > Key: SYSTEMML-1279 > URL: https://issues.apache.org/jira/browse/SYSTEMML-1279 > Project: SystemML > Issue Type: Bug > Reporter: Felix Schüler > Priority: Minor > Fix For: SystemML 0.13 > > > Our current documentation contains a snippet for a short DML scipt: > {code} > val numRows = 10000 > val numCols = 1000 > val data = sc.parallelize(0 to numRows-1).map { _ => > Row.fromSeq(Seq.fill(numCols)(Random.nextDouble)) } > val schema = StructType((0 to numCols-1).map { i => StructField("C" + i, > DoubleType, true) } ) > val df = spark.createDataFrame(data, schema) > val minMaxMean = > """ > minOut = min(Xin) > maxOut = max(Xin) > meanOut = mean(Xin) > """ > val mm = new MatrixMetadata(numRows, numCols) > val minMaxMeanScript = dml(minMaxMean).in("Xin", df, mm).out("minOut", > "maxOut", "meanOut") > val (min, max, mean) = ml.execute(minMaxMeanScript).getTuple[Double, Double, > Double]("minOut", "maxOut", "meanOut") > {code} > Execution of the line > {code} > val minMaxMeanScript = dml(minMaxMean).in("Xin", df, mm).out("minOut", > "maxOut", "meanOut") > {code} > in the spark-shell leads to the following error: > {code} > scala> val minMaxMeanScript = dml(minMaxMean).in("Xin", df, mm).out("minOut", > "maxOut", "meanOut") > [Stage 0:> (0 + 4) / > 4]17/02/16 13:37:10 WARN CodeGenerator: Error calculating stats of compiled > class. > java.io.EOFException > at java.io.DataInputStream.readFully(DataInputStream.java:197) > at java.io.DataInputStream.readFully(DataInputStream.java:169) > at org.codehaus.janino.util.ClassFile.loadAttribute(ClassFile.java:1509) > at org.codehaus.janino.util.ClassFile.loadAttributes(ClassFile.java:644) > at org.codehaus.janino.util.ClassFile.loadFields(ClassFile.java:623) > at org.codehaus.janino.util.ClassFile.<init>(ClassFile.java:280) > at > org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator$$anonfun$recordCompilationStats$1.apply(CodeGenerator.scala:967) > at > org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator$$anonfun$recordCompilationStats$1.apply(CodeGenerator.scala:964) > at scala.collection.Iterator$class.foreach(Iterator.scala:893) > at scala.collection.AbstractIterator.foreach(Iterator.scala:1336) > at scala.collection.IterableLike$class.foreach(IterableLike.scala:72) > at scala.collection.AbstractIterable.foreach(Iterable.scala:54) > at > org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator$.recordCompilationStats(CodeGenerator.scala:964) > at > org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator$.org$apache$spark$sql$catalyst$expressions$codegen$CodeGenerator$$doCompile(CodeGenerator.scala:936) > at > org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator$$anon$1.load(CodeGenerator.scala:998) > at > org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator$$anon$1.load(CodeGenerator.scala:995) > at > org.spark_project.guava.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3599) > at > org.spark_project.guava.cache.LocalCache$Segment.loadSync(LocalCache.java:2379) > at > org.spark_project.guava.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2342) > at > org.spark_project.guava.cache.LocalCache$Segment.get(LocalCache.java:2257) > at org.spark_project.guava.cache.LocalCache.get(LocalCache.java:4000) > at > org.spark_project.guava.cache.LocalCache.getOrLoad(LocalCache.java:4004) > at > org.spark_project.guava.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4874) > at > org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator$.compile(CodeGenerator.scala:890) > at > org.apache.spark.sql.catalyst.expressions.codegen.GenerateUnsafeProjection$.create(GenerateUnsafeProjection.scala:405) > at > org.apache.spark.sql.catalyst.expressions.codegen.GenerateUnsafeProjection$.create(GenerateUnsafeProjection.scala:359) > at > org.apache.spark.sql.catalyst.expressions.codegen.GenerateUnsafeProjection$.create(GenerateUnsafeProjection.scala:32) > at > org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator.generate(CodeGenerator.scala:874) > at > org.apache.spark.sql.catalyst.encoders.ExpressionEncoder.extractProjection$lzycompute(ExpressionEncoder.scala:266) > at > org.apache.spark.sql.catalyst.encoders.ExpressionEncoder.extractProjection(ExpressionEncoder.scala:266) > at > org.apache.spark.sql.catalyst.encoders.ExpressionEncoder.toRow(ExpressionEncoder.scala:290) > at > org.apache.spark.sql.SparkSession$$anonfun$3.apply(SparkSession.scala:547) > at > org.apache.spark.sql.SparkSession$$anonfun$3.apply(SparkSession.scala:547) > at scala.collection.Iterator$$anon$11.next(Iterator.scala:409) > at scala.collection.Iterator$$anon$11.next(Iterator.scala:409) > at scala.collection.Iterator$$anon$11.next(Iterator.scala:409) > at scala.collection.Iterator$$anon$11.next(Iterator.scala:409) > at scala.collection.Iterator$$anon$11.next(Iterator.scala:409) > at org.apache.spark.util.Utils$.getIteratorSize(Utils.scala:1762) > at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1157) > at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1157) > at > org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1944) > at > org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1944) > at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87) > at org.apache.spark.scheduler.Task.run(Task.scala:99) > at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:282) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at java.lang.Thread.run(Thread.java:745) > minMaxMeanScript: org.apache.sysml.api.mlcontext.Script = > > Inputs: > [1] (Dataset as Matrix) Xin: [C0: double, C1: double ... 998 more fields] > Outputs: > [1] minOut > [2] maxOut > [3] meanOut > {code} > It seems like it still evaluates the expression correctly and it might be a > Spark codegen issue. When setting the number of columns to 100 the exception > does not occur and for subsequent evaluations it also doesn't occur. -- This message was sent by Atlassian JIRA (v6.3.15#6346)