我通过Python使用Apache Spark 1.5.2,结果似乎有一些非确定性。进一步沿着数据管道 - 经过一些更多的连接和过滤器 - 结果表的行数不同。
很难提取相关的例子,但这里的结构可能是相关的(其他部分是简单的连接,where,datediff,......)。它通过sqlContext.sql(...)
使用Spark SQL。我也介于.cacheTable()
之间。:
select row_number() over(order by col1, col2 desc) as id, t.*
from (select ... where ... group by ...) t
...
select count(1)
from table1 t1
left join table2 t2
on t1.id=t2.id
where t2.id is null
基本上,最后一个命令在每次调用时都会产生不同的结果。
你能看到哪一点可能存在非确定性的东西吗?
编辑:有人提出row_number()是非确定性的。虽然我知道这一点,但其他事情正在发生。显然,非确定性在单次执行期间会两次启动,因此即使来自单个源的自连接也会产生不正确的结果。