web-dev-qa-db-fra.com

Spark SQL changer le format du nombre

Après la commande show, l’imprimante imprime les éléments suivants:

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

Existe-t-il un moyen de changer le format NumberColumn en quelque chose comme 0.000043?

7
Cherry

vous pouvez utiliser format_numberfonction comme 

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

ici 5 sont les décimales que vous voulez montrer

Comme vous pouvez le voir dans le lien ci-dessus, les fonctions format_number renvoient une colonne string 

numéro_format (Colonne x, int d)
Met en forme la colonne numérique x dans un format tel que '#, ###, ###. ##', arrondi à d décimales, et renvoie le résultat sous la forme d'une colonne de chaîne.

Si vous n'avez pas besoin de ,, vous pouvez appeler la fonction regexp_replace qui est définie par 

regexp_replace (Colonne e, modèle de chaîne, remplacement de chaîne)
Remplacez toutes les sous-chaînes de la valeur de chaîne spécifiée qui correspond à regexp avec rep.

et l'utiliser comme

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

Ainsi, comma (,) doit être supprimé pour les grands nombres.

10
Ramesh Maharjan

Vous pouvez utiliser l'opération cast comme ci-dessous: 

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

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

ajustez la précision et l'échelle en conséquence.

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

6 précisions décimales dans ce cas.

0
Dinesh Kumar