python - 在 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__
有什么帮助吗?
解决方案
在 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|
+--------+---------+
值得注意的是,它以字符串形式返回结果。
推荐阅读
- ruby - 使用 ruby Octokit,我如何返回自指定日期以来创建的所有拉取请求
- javascript - 在我重新启动应用程序之前,导航抽屉不会刷新
- c - SDL2 渲染在基于 Rockchip 的板上不超过 30 FPS
- c# - 具有 1 对 1 关系实体框架的抽象类
- sql - 给定一个日期,我想返回一个比第一个工作日早一个月的日期
- python - 选择排序不理解此代码
- laravel-5 - 我应该如何为 Laravel 应用程序选择托管服务?
- javascript - 如何创建具有多行的底部选项卡导航器?
- azure - 如何以编程方式重定向到 ASP.NET Core MVC 中的 Azure AD 登录和注销页面?
- node.js - 使用 HTTP 的云函数