奇怪的join结果
在开发中,遇到了一个奇怪的join结果。简化之后的模型如下,目测执行的结果第一个为true,第二个为false,而实际的结果却是两个True。
1 | create or replace temp view test1 as |
究其原因是在不同类型的比较中,spark会把其先转为Double类型再进行比较,而Double类型的精度有限,这样就会出现让人匪夷所思的现象。在实际复杂的join中,往往会忽视数据类型的检查。
所以在实际开发中,一定要保证join两边的数据类型一致,特别是join条件两边存在表达式的情况,例如:
1 | from tableA |
建议写成:
1 | from tableA |
在有表达式的地方,加上类型转换。