四舍五入数据框中的所有列 - 两位小数 pyspark

Ant*_*nts 3 apache-spark apache-spark-sql pyspark

我使用此命令将数据框中的所有列四舍五入到小数点后两位:

data = data.withColumn("columnName1", func.round(data["columnName1"], 2))
Run Code Online (Sandbox Code Playgroud)

我不知道如何通过一个命令对所有数据框进行四舍五入(不是每一列都是分开的)。有人可以帮我吗?我不想使用不同的列名称使用相同的命令 50 次。

Lam*_*nus 11

没有用于将所有函数应用于列的函数或命令,但您可以迭代。

+-----+-----+
| col1| col2|
+-----+-----+
|1.111|2.222|
+-----+-----+

df = spark.read.option("header","true").option("inferSchema","true").csv("test.csv")

for c in df.columns:
    df = df.withColumn(c, f.round(c, 2))
    
df.show()

+----+----+
|col1|col2|
+----+----+
|1.11|2.22|
+----+----+
Run Code Online (Sandbox Code Playgroud)

更新

from pyspark.sql import functions as f

df.select(*[f.round(c, 2).alias(c) for c in df.columns]) \
  .show()

+----+----+
|col1|col2|
+----+----+
|1.11|2.22|
+----+----+
Run Code Online (Sandbox Code Playgroud)