gpt4 book ai didi

pyspark - 如何在 PySpark Dataframe show 中设置显示精度

转载 作者:行者123 更新时间:2023-12-04 14:38:53 28 4
gpt4 key购买 nike

调用 .show() 时如何在 PySpark 中设置显示精度?

考虑以下示例:

from math import sqrt
import pyspark.sql.functions as f

data = zip(
map(lambda x: sqrt(x), range(100, 105)),
map(lambda x: sqrt(x), range(200, 205))
)
df = sqlCtx.createDataFrame(data, ["col1", "col2"])
df.select([f.avg(c).alias(c) for c in df.columns]).show()

哪些输出:

#+------------------+------------------+
#| col1| col2|
#+------------------+------------------+
#|10.099262230352151|14.212583322380274|
#+------------------+------------------+

如何更改它以便它只显示小数点后的 3 位数字?

期望的输出:

#+------+------+
#| col1| col2|
#+------+------+
#|10.099|14.213|
#+------+------+

这是 this scala question 的 PySpark 版本.我在这里发布它是因为我在搜索 PySpark 解决方案时找不到答案,而且我认为它将来会对其他人有所帮助。

最佳答案

圆形的

最简单的选择是使用 pyspark.sql.functions.round() :

from pyspark.sql.functions import avg, round
df.select([round(avg(c), 3).alias(c) for c in df.columns]).show()
#+------+------+
#| col1| col2|
#+------+------+
#|10.099|14.213|
#+------+------+

这会将值保持为数字类型。

格式编号

functions scala 和 python 是一样的。唯一的区别是 import .

您可以使用 format_number 如官方 api 文档中所述,将数字格式化为所需的小数位:

Formats numeric column x to a format like '#,###,###.##', rounded to d decimal places, and returns the result as a string column.



from pyspark.sql.functions import avg, format_number 
df.select([format_number(avg(c), 3).alias(c) for c in df.columns]).show()
#+------+------+
#| col1| col2|
#+------+------+
#|10.099|14.213|
#+------+------+

转换后的列将为 StringType逗号用作千位分隔符:

#+-----------+--------------+
#| col1| col2|
#+-----------+--------------+
#|500,100.000|50,489,590.000|
#+-----------+--------------+

正如此 answer 的 Scala 版本中所述我们可以使用 regexp_replace 替换 ,用你想要的任何字符串

Replace all substrings of the specified string value that match regexp with rep.



from pyspark.sql.functions import avg, format_number, regexp_replace
df.select(
[regexp_replace(format_number(avg(c), 3), ",", "").alias(c) for c in df.columns]
).show()
#+----------+------------+
#| col1| col2|
#+----------+------------+
#|500100.000|50489590.000|
#+----------+------------+

关于pyspark - 如何在 PySpark Dataframe show 中设置显示精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48832493/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com