我有一个amount
值,我们正在从文件中读取该值并尝试在控制台上打印。
当我们尝试打印时,它显示为Exponential
,而另一个问题是当我们尝试投射时,它显示为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");