首页 > 解决方案 > 如何以正确的格式以科学记数法显示 PySpark 数据框中的列

问题描述

假设我在 pyspark 中有一个数据框,如下所示:

+---------+---------+
|   col1  |  col2   |
+---------+---------+
|3.34567e4| 45876549| 
+---------+---------+
|4.4781e8 | 7856549 |
+---------+---------+

我想保持col1科学计数法,但显示小数点后 2 位的数字。我也想改成col2科学格式。所以结果应该如下:

+---------+---------+
|   col1  |  col2   |
+---------+---------+
|  3.35e4 |  4.59e7 | 
+---------+---------+
|  4.48e8 |  7.86e6 |
+---------+---------+

我搜索了很多,但我没有找到任何答案。

标签: dataframepysparkformatting

解决方案


您可以使用pyspark.sql.functions.format_string,它允许您应用printf样式格式来显示结果。

在这种情况下,您可以使用格式字符串"%.2e"来格式化具有 2 个小数点的指数(科学)表示法的浮点数。

例如:

from pyspark.sql.functions import col, format_string

df.select(*[format_string("%.2e", col(c).cast("float")).alias(c) for c in df.columns]).show()
#+--------+--------+
#|    col1|    col2|
#+--------+--------+
#|3.35e+04|4.59e+07|
#|4.48e+08|7.86e+06|
#+--------+--------+

请注意,结果列是字符串(而不是数字)。


推荐阅读