我很好奇,当我在Spark程序中对一堆小数进行任何数学计算时,事先对圆数有什么影响吗?例如:
3.000009481 * 10.90001001010
计算同样的时间:
3.000 * 10.900
对于乘法,除法和更高级的东西,如幂和平方根等,它是否有所不同?
我很想知道,因为当你在数百万的数字上做这件事时,让它说它只有几分之一毫秒才有意义吗?或者你总是得到相同的小数计算时间?
我有一个很大的aggregateByKey函数正在进行大量的计算。我所使用的群集始终提供不一致的性能指标。
答案 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
的计算
Decimal
聚合函数,例如sum
"SELECT sum(cast(id AS DECIMAL(5,0))) FROM range(1)"
聚合函数,例如avg
请参阅"SELECT avg(cast(id AS DECIMAL(10,0))) FROM range(1)"
对象sum
和avg
。
因此,对于Spark SQL中的结构化查询,如果可以(显式或使用具有正确类型的模式)进行舍入是有意义的。