Сохранение двойного данных в искровом фрейме - PullRequest
0 голосов
/ 31 марта 2019

В приведенном ниже коде 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|
+---+---------------------+

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019
scala> df.select(format_number(col("b"),4)).show(false)
+----------------------+
|format_number(b, 4)   |
+----------------------+
|1,324,235,345,435.4546|
+----------------------+

вы можете использовать функцию number_formater в верхней части столбца, чтобы вы могли автоматически преобразовывать ее в строку с вашими требованиями с точностью.

надеюсь, это поможет в обобщении.

0 голосов
/ 31 марта 2019

Попробуйте выполнить приведение к 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|
+---+------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...