Tôi đang chạy mã này vào EMR 4.6.0 + Spark 1.6.1:Spark SQL thất bại vì "hồ bơi liên tục đã phát triển qua JVM hạn 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)
}
Trong giai đoạn cuối cùng của saveAsTextFile
, nó không thành công với lỗi này:
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 */ }
(...)
Lý do có thể là gì? Cảm ơn
Thú vị. Mỗi lớp java có một nhóm liên tục để giữ mọi thứ liên tục, bao gồm cả các tên phương thức. 'u2 constant_pool_count', vì vậy số hằng số tối đa là 0xFFFF. Tôi sử dụng json đơn giản để kiểm tra mà không ném một ngoại lệ. Tại sao mã này tạo ra quá nhiều hằng số? Nó sẽ là một phần có thể đăng của dữ liệu json? –
@RockieYang không thể tải lên json của tôi nhưng nó bao gồm khoảng 90 trường Chuỗi/Số. –
Bạn chỉ cần thêm một json. Và bạn đã kiểm tra xem nó có liên quan đến số hàng không? –