我有一个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");

09-29 23:47