首页 > 解决方案 > 在 pyspark show() 中更改变量的格式

问题描述

我需要在 pyspark 中格式化 group by 的计数值

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

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

我想用逗号显示计数列作为千位分隔符

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

尝试了以下但得到 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__

有什么帮助吗?

标签: pythonpysparkgroup-byapache-spark-sqlformat

解决方案


在 Spark 中使用format_number() 函数:

它将列格式化为“#,###,###.##”等格式,四舍五入到“d”小数位。在我们的例子中,我们需要0小数位。

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|
+--------+---------+

值得注意的是,它以字符串形式返回结果。


推荐阅读