我已经使用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()
有人知道是什么原因造成的吗?