AWS Athena中的“整数溢出”有超过8亿条记录

时间:2019-03-23 18:10:24

标签: oracle apache-spark amazon-emr amazon-athena

我已经使用Spark EMR将表以镶木地板格式从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()

有人知道是什么原因造成的吗?

0 个答案:

没有答案