在spark数据帧中保存双重dataype

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

在下面的spark-scala代码中,双数据类型值的存储方式不同。虽然在表中,但所有列都是字符串类型。黑斑羚也有相同的结果。

有人知道如何确保保存和检索确切的值吗?

谢谢

val df = Seq(("one", 1324235345435.4546)).toDF("a", "b")
df.write.mode("append").insertInto("test")
spark.sql("select * from test").show(false)
+---+---------------------+
|a  |b                    |
+---+---------------------+
|one|1.3242353454354546E12|
+---+---------------------+
提问于
用户回答回答于

尝试使用Decimal type然后使用insert into Hive表。

val df = Seq(("one", 1324235345435.4546))
             .toDF("a", "b")
             .select('a,'b.cast("Decimal(36,4)"))

df.show(false)
+---+------------------+
|a  |b                 |
+---+------------------+
|one|1324235345435.4546|
+---+------------------+
用户回答回答于
scala> df.select(format_number(col("b"),4)).show(false)
+----------------------+
|format_number(b, 4)   |
+----------------------+
|1,324,235,345,435.4546|
+----------------------+

您可以使用number_formater列顶部的函数,以便它可以自动转换为具有精度要求的字符串。

扫码关注云+社区

领取腾讯云代金券