у меня есть Dataframe с такого рода данных:О потере точности при расчете совокупной суммы с кадрами данных
unit,sensitivity currency,trading desk ,portfolio ,issuer ,bucket ,underlying ,delta ,converted sensitivity
ES ,USD ,EQ DERIVATIVES,ESEQRED_LH_MIDX ,5GOY ,5 ,repo ,0.00002 ,0.00002
ES ,USD ,EQ DERIVATIVES,IND_GLOBAL1 ,no_localizado ,8 ,repo ,-0.16962 ,-0.15198
ES ,EUR ,EQ DERIVATIVES,ESEQ_UKFLOWN ,IGN2 ,8 ,repo ,-0.00253 ,-0.00253
ES ,USD ,EQ DERIVATIVES,BASKETS1 ,9YFV ,5 ,spot ,-1003.64501 ,-899.24586
, и я должен сделать операцию агрегации над этими данными, делать что-то вроде этого:
val filteredDF = myDF.filter("unit = 'ES' AND `trading desk` = 'EQ DERIVATIVES' AND issuer = '5GOY' AND bucket = 5 AND underlying = 'repo' AND portfolio ='ESEQRED_LH_MIDX'")
.groupBy("unit","trading desk","portfolio","issuer","bucket","underlying")
.agg(sum("converted_sensitivity"))
Но я вижу, что я теряю точность на агрегированной суммы, так как я могу быть уверен, что каждому значению «converted_sensitivity» преобразуется в BigDecimal (25,5) перед выполнением операции суммы над новым агрегированным столбцом?
спасибо.
Вы можете выполнить операцию карты, чтобы сначала вычислить версию столбца BigDecimal, а затем добавить их в следующую операцию. Я думаю, что это было бы между .groupBy и .agg – Paul