当前位置: 首页 > 知识库问答 >
问题:

火花误差-十进制精度39超过最大精度38

冯招
2023-03-14

当我试图从Spark dataframe收集数据时,我得到一个错误,说明

# Load required table into memory from Oracle database
df <- loadDF(sqlContext, source = "jdbc", url = "jdbc:oracle:thin:usr/pass@url.com:1521" , dbtable = "TBL_NM")

RawData <- df %>% 
    filter(DT_Column > DATE(‘2015-01-01’))

RawData <- as.data.frame(RawData)

下面是StackTrace:

警告tasksetmanager:在stage 0.0中丢失任务1.0(TID 1,10..***,executor 0):java.lang.IllegalArgumentException:requirement:Decimal precision 39在scala.predef超过最大精度38.require(predef.scala:224)在org.apache.spark.sql.types.Decimal.set(Decimal.scala:113)在org.apache.spark.sql.types.Decimal$.apply(Decimal.scala:426)在jdbcutils$$makegetter$3$$anonfun$9.在org.apache.spark.sql.execution.datasources.jdbc.jdbcutils.scala:337)应用(jdbcutils.scala:337)在org.apache.spark.sql.execution.datasources$org$apache$spark$sql$schark$sql$org$apache$spark$sql$squin$3$$datasources$jdbcun$9.应用tils.scala:438)在org.apache.spark.sql.execution.datasources.jdbc.jdbcutils$$anonfun$org$apache$spark$sql$execution$datasources$jdbcutils$$makegetter$3.在org.apache.spark.sql.execution.datasources.jdbc.jdbcutils.$$anonfun$org$apache$spark$sql$execution$datasources$$makegetter$3.在org.apache.spark.sql.execution.datasources.jdbc.jdbcutils.scala:337)应用(jdbcutils.scala:335)在tils.scala:268)在org.apache.spark.util.nextiterator.hasnext(nextiterator.scala:73)在org.apache.spark.util.completioniterator.hasnext(completioniterator.scala:32)在org.apache.spark.sql.catalyst.expressions.generatedclass$generatediterator.processnext(未知来源)在genexec.scala:377)在org.apache.spark.sql.execution.sparkplan$$anonfun$2.在org.apache.spark.sql.execution.sparkplan$$anonfun$2.应用(sparkplan.scala:231)在org.apache.spark.sql.execution.sparkplan$$anonfun$2.在org.apache.spark.rdd.rdd$$anonfun$mappartitionsinternal$1$$anonfun$applice$25.在dd.rdd.iterator(rdd.scala:287)在org.apache.spark.scheduler.resulttask.runtask(resulttask.scala:87)在org.apache.spark.scheduler.task.run(task.scala:99)在org.apache.spark.scheduler.task.run(task.scala:282)在java.util.concurrent.threadpoolexecutor.runwork(threadpoolexecutor.java:1142)在745)

请提出任何解决办法。谢谢你。

共有1个答案

华睿识
2023-03-14

用AWS胶水和Postgres碰到了这个。Spark 2.1.0中有一个bug,它为大多数人修复了它,但有人在评论中发布了一个关于使用customSchema选项的解决方案

我在AWS Glue和Spark SQL中遇到了类似的问题:我在计算货币金额,所以结果是浮动。Glue抛出错误十进制精度1超过最大精度-1,尽管Glue数据目录将列定义为十进制。通过显式地将列强制转换为NUMERIC(10,2)来从上面的customSchema解决方案中获取一个页面,Spark停止了抱怨。

 类似资料:
  • 我在应用程序中使用BigDecimal 作为我的数字,例如,使用 JPA。我对术语“精度”和“规模”进行了一些研究,但我不明白它们到底是什么。 有人能解释一下BigDecimal值的“精度”和“刻度”的含义吗? 谢谢!

  • 我使用的是Database ricks 4.3(包括Apache Spark 2.3.1、Scala 2.11)、Python版本3.5。 我有一个Spark数据帧df_spark我在上面运行了分组为UDF的熊猫,以获得一个新的Spark数据帧df_spark2,它只有一列字符串类型。当我显示df_spark2的头部时,我得到了错误: 我在熊猫数据框架上测试了按UDF分组的熊猫,效果很好。代码为:

  • 本文向大家介绍C#浮点,双精度,十进制,包括了C#浮点,双精度,十进制的使用技巧和注意事项,需要的朋友参考一下 示例 浮动 float是.NET数据类型的别名System.Single。它允许存储IEEE 754单精度浮点数。存在此数据类型mscorlib.dll,每个C#项目在创建它们时都会隐式引用该数据类型。 大致范围:-3.4×10 38至3.4×10 38 十进制精度:6-9个有效数字 记

  • 问题内容: 我试图确定双精度的最大精度是多少。在此链接的可接受答案的注释中,Java中的double保持精度 @PeterLawrey将max precision设置为15。 您如何确定呢? 问题答案: @PeterLawrey表示最大精度为15。 实际上,这根本不是他所说的。他说的是: 双精度有15个小数位 他错了。它们的精度为15个十进制 数字 。 任何数字中的小数位数由其对数10的对数给出。

  • 我试图确定double的最大精度是多少。在这个链接中接受的答案的注释中,Java中的Retain precision with double@PeterLawrey声明max precision In 15。 你如何确定这一点?

  • 我有一个神经网络,它对3个输出进行分类。我的数据集非常小,我有340张火车图像和60张测试图像。我构建了一个模型,当我编译时,我的结果是: 纪元97/100 306/306 [==============================] - 46s 151ms/阶跃损失: 0.2453-精度: 0.8824-val_loss: 0.3557-val_accuracy: 0.8922纪元98/10