Sto facendo funzionare questo codice su EMR 4.6.0 + Spark 1.6.1:Spark SQL fallisce perché "pool costante è cresciuto passato limite JVM di 0xFFFF"
val sqlContext = SQLContext.getOrCreate(sc)
val inputRDD = sqlContext.read.json(input)
try {
inputRDD.filter("`first_field` is not null OR `second_field` is not null").toJSON.coalesce(10).saveAsTextFile(output)
logger.info("DONE!")
} catch {
case e : Throwable => logger.error("ERROR" + e.getMessage)
}
Nell'ultima fase della saveAsTextFile
, fallisce con questo errore:
16/07/15 08:27:45 ERROR codegen.GenerateUnsafeProjection: failed to compile: org.codehaus.janino.JaninoRuntimeException: Constant pool has grown past JVM limit of 0xFFFF
/* 001 */
/* 002 */ public java.lang.Object generate(org.apache.spark.sql.catalyst.expressions.Expression[] exprs) {
/* 003 */ return new SpecificUnsafeProjection(exprs);
/* 004 */ }
(...)
Quale potrebbe essere la causa? Grazie
Interessante. Ogni classe java ha un pool costante per mantenere tutto costante, includendo anche i nomi dei metodi. 'u2 constant_pool_count', quindi il numero massimo di costanti è 0xFFFF. Io uso JSON semplice per testare che non genera un'eccezione. Perché questo codice genera così tanti costanti? Sarà possibile pubblicare parte dei dati JSON? –
@RockieYang non è possibile caricare il mio json ma consiste di circa 90 campi stringa/numero. –
Hai solo bisogno di aggiungere un json. E hai testato se è relativo numero di righe? –