«Целочисленное переполнение» в AWS Athena для более чем 800 миллионов записей - PullRequest
0 голосов
/ 23 марта 2019

Я использовал 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()

Кто-нибудь знает, что может вызвать проблему?

...