【问题标题】:How (if at all) could rounding Decimals improve performance?四舍五入小数如何(如果有的话)提高性能?
【发布时间】:2017-03-31 16:25:50
【问题描述】:

我很好奇,当我在我的 Spark 程序中对一堆小数进行任何类型的数学运算时,预先对数字进行四舍五入有什么不同吗?例如:

3.000009481 * 10.90001001010

同时计算类似的时间:

3.000 * 10.900

乘法、除法和更高级的东西(如幂和平方根等)是否有所不同?

我想知道,因为当您对数百万个数字执行此操作时,可以说它只有几分之一毫秒,四舍五入有意义吗?或者你总是会得到相同的小数计算时间?

我有一个大型的 aggregateByKey 函数,它正在执行大量计算。我所在的集群始终提供不一致的性能指标。

【问题讨论】:

    标签: performance scala apache-spark


    【解决方案1】:

    它可以在数值上产生巨大的差异(请参阅:What Every Computer Scientist Should Know About Floating-Point Arithmetic),但不会影响性能。

    【讨论】:

      【解决方案2】:

      Spark SQL 的Optimizer 使用DecimalAggregates 逻辑优化,当精度小于时,将基于Decimal 的计算替换为优化的运算符:

      • 9 代表sum 聚合函数,例如"SELECT sum(cast(id AS DECIMAL(5,0))) FROM range(1)"
      • 12 表示 avg 聚合函数,例如"SELECT avg(cast(id AS DECIMAL(10,0))) FROM range(1)"

      请参阅 functions 对象以获取 sumavg

      因此,对于 Spark SQL 中的结构化查询,如果可以(显式地或通过使用具有正确类型的架构)进行四舍五入确实是有意义的。

      【讨论】:

        猜你喜欢
        • 2023-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多