it-roy-ru.com

Spark SQL изменить формат числа

После команды show spark печатает следующее:

+-----------------------+---------------------------+
|NameColumn             |NumberColumn               |
+-----------------------+---------------------------+
|name                   |4.3E-5                     |
+-----------------------+---------------------------+

Есть ли способ изменить формат NumberColumn на что-то вроде 0.000043?

7
Cherry

вы можете использовать format_numberfunction в качестве 

import org.Apache.spark.sql.functions.format_number
df.withColumn("NumberColumn", format_number($"NumberColumn", 5))

здесь 5 - десятичные разряды, которые вы хотите показать

Как видно из приведенной выше ссылки, функции format_number возвращают столбец string 

format_number (столбец x, int d)
Форматирует числовой столбец x в такой формат, как '#, ###, ###. ##', округленный до десятичных знаков d, и возвращает результат в виде строкового столбца.

Если вам не требуется ,, вы можете вызвать функцию regexp_replace, которая определяется как 

regexp_replace (столбец e, шаблон строки, замена строки)
Замените все подстроки указанного строкового значения, которые соответствуют регулярному выражению с rep.

и использовать его как

import org.Apache.spark.sql.functions.regexp_replace
df.withColumn("NumberColumn", regexp_replace(format_number($"NumberColumn", 5), ",", ""))

Таким образом запятая (,) должны быть удалены для больших чисел.

10
Ramesh Maharjan

Вы можете использовать операцию cast, как показано ниже: 

val df = sc.parallelize(Seq(0.000043)).toDF("num")    

df.createOrReplaceTempView("data")
spark.sql("select CAST (num as DECIMAL(8,6)) from data")

отрегулируйте точность и масштаб соответственно.

4
vdep
df.createOrReplaceTempView("table")
outDF=sqlContext.sql("select CAST (num as DECIMAL(15,6)) from table")

6 десятичных точностью в этом случае.

0
Dinesh Kumar