如何(如果有的话)舍入小数可以提高性能?

时间:2015-12-07 18:34:36

标签: performance scala apache-spark

我很好奇,当我在Spark程序中对一堆小数进行任何数学计算时,事先对圆数有什么影响吗?例如:

3.000009481 * 10.90001001010

计算同样的时间:

3.000 * 10.900

对于乘法,除法和更高级的东西,如幂和平方根等,它是否有所不同?

我很想知道,因为当你在数百万的数字上做这件事时,让它说它只有几分之一毫秒才有意义吗?或者你总是得到相同的小数计算时间?

我有一个很大的aggregateByKey函数正在进行大量的计算。我所使用的群集始终提供不一致的性能指标。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

Spark SQL的List<String> lines = Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8); String max = "", min = ""; List<String> words = new ArrayList<String>(); // We take a single line for(String line: lines){ // Break the next line through the regular to an array of words words.addAll(Arrays.asList(line.split("[\\p{Punct}\\s]+"))); } Comparator<String> stringComparator = new Comparator<String>() { @Override public int compare(String o1, String o2) { return Integer.valueOf(o1.length()).compareTo(Integer.valueOf(o2.length())); } }; max = Collections.max(words,stringComparator); min = Collections.min(words,stringComparator); textArea.setText(String.format("File Path: %s\n" +"The longest word: %s\n" +"The shortest word: %s\n" +"Task complete...", fileName, max, min)); 使用Optimizer逻辑优化,当精度小于:

时,优化运算符替换基于DecimalAggregates的计算
  • 9表示Decimal聚合函数,例如sum
  • 12代表"SELECT sum(cast(id AS DECIMAL(5,0))) FROM range(1)"聚合函数,例如avg

请参阅"SELECT avg(cast(id AS DECIMAL(10,0))) FROM range(1)"对象sumavg

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