我有一个 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/