Python 通过Spark从JDBC推断的十进制精度
当试图将数据从JDBCOracle加载到Spark中时,十进制字段中似乎存在精度损失,据我了解Spark支持十进制38,18。甲骨文中的字段是小数38,14,而Spark将最后四位数字舍入为小数38,10。这只发生在dataframe中的一个字段上,而在同一查询中,另一个字段填充正确的模式 尝试在spark submit中传递spark.sql.decimalOperations.allowPrecisionLoss=false conf,但未获得所需的结果Python 通过Spark从JDBC推断的十进制精度,python,oracle,apache-spark,jdbc,pyspark,Python,Oracle,Apache Spark,Jdbc,Pyspark,当试图将数据从JDBCOracle加载到Spark中时,十进制字段中似乎存在精度损失,据我了解Spark支持十进制38,18。甲骨文中的字段是小数38,14,而Spark将最后四位数字舍入为小数38,10。这只发生在dataframe中的一个字段上,而在同一查询中,另一个字段填充正确的模式 尝试在spark submit中传递spark.sql.decimalOperations.allowPrecisionLoss=false conf,但未获得所需的结果 jdbcDF = spark.rea
jdbcDF = spark.read \
.format("jdbc") \
.option("url", "ORACLE") \
.option("dbtable", "QUERY") \
.option("user", "USERNAME") \
.option("password", "PASSWORD") \
.load()
因此,考虑到Spark从一个样本记录推断出模式,这在这里是如何工作的?它是否使用查询的结果,即SELECT*FROM TABLE_NAME JOIN。。。或者它是否采取了另一种方式来猜测自己的模式?有没有人能解释一下这一点,并建议如何在不操纵查询的情况下实现正确的十进制精度,因为对查询进行强制转换确实可以解决问题,但更愿意获得一些替代方案