繁体   English   中英

Spark Java,除了方法vs. leftanti加入之外,返回的结果不一致,可能是错误?

[英]Spark Java except method vs. leftanti join returning inconsistent results, possible bug?

Spark数据框Java API中似乎遇到了一个错误。 我正在使用spark 2.3.1。 我已经花了好几天的时间挠头,我不知道为什么使用除vs. leftanti过滤掉不需要的数据的两种方法之间的结果会有所不同的原因。

看来,except函数实际上是一个与众不同的except! 除之外调用的数据帧将删除所有重复项!

只是想提供此信息,以防其他人遇到同样的问题! 运行except函数会在结果数据框中生成唯一数据。 要保留原始数据,请确保使用leftanti!

似乎从2.3.0开始.except()充当EXCEPT DISTINCT操作。 前面提到EXCEPT文档是不正确的,因为该行为始终是EXCEPT DISTINCT

如果您比较leftanti计划

== Physical Plan ==
*BroadcastHashJoin [value#1], [value#4], LeftAnti, BuildRight
:- LocalTableScan [value#1]
+- BroadcastExchange HashedRelationBroadcastMode(List(input[0, string, true]))
   +- LocalTableScan [value#4]

except()

== Physical Plan ==
*HashAggregate(keys=[value#1], functions=[])
+- Exchange hashpartitioning(value#1, 200)
   +- *HashAggregate(keys=[value#1], functions=[])
      +- *BroadcastHashJoin [coalesce(value#1, )], [coalesce(value#4, )], LeftAnti, BuildRight, (value#1 <=> value#4)
         :- LocalTableScan [value#1]
         +- BroadcastExchange HashedRelationBroadcastMode(List(coalesce(input[0, string, true], )))
            +- LocalTableScan [value#4]

您可以看到还有其他的HashAggregate步骤可以删除重复项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM