Spark中的非确定性 - 可能来自row_number()?

时间:2016-06-17 13:20:25

标签: sql apache-spark pyspark

我通过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()是非确定性的。虽然我知道这一点,但其他事情正在发生。显然,非确定性在单次执行期间会两次启动,因此即使来自单个源的自连接也会产生不正确的结果。

0 个答案:

没有答案