Я использовал Spark EMR для копирования таблиц из Oracle в S3 в формате паркета, а затем использовал Glue Crawler для сканирования данных из S3 и зарегистрирован в Афине.Прием данных в порядке, но когда я попытался просмотреть данные, он показал эту ошибку:
GENERIC_INTERNAL_ERROR: переполнение целого числа
Я пробовал конвейер несколько раз.Исходная схема выглядит следующим образом:
SAMPLEINDEX(NUMBER38, 0)
GENEINDEX(NUMBER38, 0)
VALUE(FLOAT)
MINSEGMENTLENGTH(NUMBER38, 0)
Я пытался преобразовать данные в целочисленные, длинные и строковые значения, но ошибка все еще сохраняется.Я также проверил исходный набор данных и не нашел значений, которые могли бы вызвать переполнение int.
Таблицы, содержащие строки <800 миллионов, работают отлично.Но когда в таблице более 800 миллионов строк, появилась ошибка.</p>
Вот пример кода в Scala:
val table = sparkSession.read
.format("jdbc")
.option("url", "jdbc:oracle:thin://@XXX")
.option("dbtable", "tcga.%s".format(tableName))
.option("user", "XXX")
.option("password", "XXX")
.option("driver", "oracle.jdbc.driver.OracleDriver")
.option("fetchsize", "50000")
.option("numPartitions", "200")
.load()
println("writing tablename: %s".format(tableName))
val finalDF = table.selectExpr("cast(SAMPLEINDEX as string) as SAMPLEINDEX", "cast(GENEINDEX as string) as GENEINDEX",
"cast(VALUE as string) as VALUE", "cast(MINSEGMENTLENGTH as string) as MINSEGMENTLENGTH")
finalDF.repartition(200)
finalDF.printSchema()
finalDF.write.format("parquet").mode("Overwrite").save("s3n://XXX/CNVGENELEVELDATATEST")
finalDF.printSchema()
finalDF.show()
Кто-нибудь знает, что может вызвать проблему?