如何以科学记数法以正确的格式在PySpark数据框中显示列

时间:2019-01-18 19:31:48

标签: dataframe pyspark formatting

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

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

我想保留col1的科学计数法,但显示数字时保留小数点后两位。我也想将col2更改为科学格式。因此结果应该如下:

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

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

1 个答案:

答案 0 :(得分:0)

您可以使用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|
#+--------+--------+

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