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

Posted

技术标签:

【中文标题】如何以正确的格式以科学记数法显示 PySpark 数据框中的列【英文标题】:How to show a column in a PySpark dataframe in the scientific notation with proper format 【发布时间】:2019-01-18 19:31:48 【问题描述】:

假设我在 pyspark 中有如下数据框:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

谢谢,但我希望它们是数字而不是字符串。 @user2356563 您可以将数字保留为数字并在显示时转换为字符串(调用show)。换句话说:你无法改变数字的内部表示——你只能操纵它的打印方式。

以上是关于如何以正确的格式以科学记数法显示 PySpark 数据框中的列的主要内容,如果未能解决你的问题,请参考以下文章

Java导出csv数字如何不以科学计数显示,不能改变原来的值

如何格式化双对数 x 轴刻度标签以显示为 10 的幂?

在EXCEL表格中输入身份证号的时候为啥总是显示科学记数法

PySpark - 如何在 csv 输出中删除科学记数法

如何在 numpy 矩阵中以科学形式显示数字?

如何通过 pyspark 以 gzip 格式保存 spark RDD