首页 > 解决方案 > AWS Athena 中的“整数溢出”超过 8 亿条记录

问题描述

我使用 Spark EMR 以 parquet 格式将表从 Oracle 复制到 S3,然后使用 Glue 爬虫从 S3 爬取数据并在 Athena 中注册。数据摄取很好,但是当我尝试预览数据时,它显示了这个错误:

GENERIC_INTERNAL_ERROR:整数溢出

我已经多次尝试过管道。原始架构是这样的:

SAMPLEINDEX(NUMBER38, 0)
GENEINDEX(NUMBER38, 0)
VALUE(FLOAT)
MINSEGMENTLENGTH(NUMBER38, 0)

我尝试将数据转换为整数、长整数和字符串,但错误仍然存​​在。我还检查了原始数据集,没有发现任何可能导致 int 溢出的值。

包含 < 8 亿行的表可以正常工作。但是当表有超过 8 亿行时,错误开始出现。

这是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()

有谁知道可能导致问题的原因?

标签: oracleapache-sparkamazon-emramazon-athena

解决方案


推荐阅读