java - Spark SQL 长 double 值带有指数

标签 java function apache-spark-sql

我有一个 amount 值,我们正在从文件中读取该值并尝试在控制台上打印。

当我们尝试打印时,它显示为指数,另一个问题是当我们尝试强制转换时,它显示为null

输入值:

{"amt":987654321111.0}

示例代码:

df.show();
df.registerTempTable("input");
DataFrame outputDF = sqlContext.sql("select cast(amt as decimal) from input");
outputDF.show();

输出:

+----------------+
|             amt|
+----------------+
|9.87654321111E11|
+----------------+

root
 |-- amt: double (nullable = true)

root
 |-- amt: decimal(10,0) (nullable = true)

+----+
| amt|
+----+
|null|
+----+

最佳答案

使用 StructType createDecimalType 方法解决了问题。

StructType schema = new StructType().add("amt", DataTypes.createDecimalType(38,10));

DataFrame df = sqlContext.read().schema(schema).json("test.json");

关于java - Spark SQL 长 double 值带有指数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44366720/

相关文章:

java - 重置源文件夹结构并修复 Netbeans Java 项目的导入

mysql - SQL - 将多个值除以多个值

scala - DataFrame numPartitions 默认值

apache-spark - 获取 Spark 中 Parquet 表目录的源文件

java - 绘制单个像素 LibGDX

java - 如何使用GinMapBinder

java - 如何返回最右边的正数数组切割?

arrays - 如何从当前函数VBA Excel获取单元格行

function - Scala -- 如何在非函数类型上使用仿函数?

python - 将 HDF5 (.h5) 转换为 spark 数据帧