результаты округления в сводных табличных результатах (pyspark)

Привет, как бы я округлил это содержимое таблицы, выведенное этим кодом.

from pyspark.sql.functions import *
exprs = {x: "sum" for x in data2.columns[:4]}
data2.groupBy("Species").agg(exprs).show() 

res Я пытался

round(data2.groupBy("Species").agg(exprs),2).show() #not ok

data2.groupBy("Species").agg(exprs).show().round(2) # not ok

person abdoulsn    schedule 29.10.2019    source источник


Ответы (1)


round работает только с одним столбцом. Поэтому вы должны вызывать его для каждого столбца, например.

agg_cols = data2.columns[:4]
exprs = [sum(col(x)).alias(x) for x in agg_cols]
aggregated_df = data2.groupBy("Species").agg(*exprs)
aggregated_df.select(col("Species"), *[round(c, 2) for c in agg_cols]).show() 
person Paul    schedule 29.10.2019
comment
у меня такая ошибка TypeError: Column is not iterable - person abdoulsn; 30.10.2019
comment
В какой строке? Можете ли вы проверить, что agg_cols — это список строк? - person Paul; 30.10.2019
comment
Да, agg_cols — это список строк. Это исходит из этой линии. aggregated_df = data2.groupBy("Species").agg(exprs) - person abdoulsn; 30.10.2019
comment
Я отредактировал ответ. Не могли бы вы попробовать еще раз, пожалуйста? - person Paul; 30.10.2019