J'ai besoin de formater la valeur de comptage du groupe par dans pyspark

df.groupBy('PURCHASE').count().show()

|PURCHASE| count|
+--------+------+
| 202003|1426702|
| 202002|281184 |
| 202001|94333  |

Je veux afficher la colonne de comptage avec une virgule comme séparateur de milliers

|PURCHASE| count  |
+--------+--------+
| 202003|1,426,702|
| 202002|281,184  |
| 202001|94,333   |

J'ai essayé ce qui suit mais j'ai obtenu TypeError

df.groupBy('PURCHASE').count().withColumn('cnt','{:,}'.format(F.col('count'))).show()

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-29-936d1cb519c9> in <module>
----> 1 df.groupBy('PURCHASE').count().withColumn('cnt','{:,}'.format(F.col('count'))).show()

TypeError: unsupported format string passed to Column.__format__

De l'aide?

1
Vibha 8 oct. 2020 à 09:12

1 réponse

Meilleure réponse

Utilisez format_number() fonction dans Spark :

Il formate une colonne dans un format tel que '#,###,###.##', arrondi à 'd' décimales. Dans notre cas, nous avons besoin de 0 décimales.

from pyspark.sql.functions import *

df.withColumn("count", format_number("count",0)).show()
+--------+---------+
|PURCHASE|    count|
+--------+---------+
|  202003|1,426,702|
|  202002|  281,184|
|  202001|   94,333|
+--------+---------+

Il est bon de noter qu'il renvoie le résultat sous forme de chaîne.

0
Cena 8 oct. 2020 à 08:41