Кажется, что .except()
действует как EXCEPT DISTINCT
операция с 2.3.0 .Предыдущие документы, в которых упоминается 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
, который удаляет дубликаты.