Дано
val a = List(1,2,3).toDF("a")
val b = List(1,2,3).toDF("b")
Сценарий 1
a.filter(col("a").isNull).dropDuplicates().crossJoin(b).show()
// display empty data frame as expected
Сценарий 2
val c = List().map(a => col(a))
a.select(c:_*).crossJoin(b).show()
// displays
+---+
| b|
+---+
| 1|
| 1|
| 1|
| 2|
| 2|
| 2|
| 3|
| 3|
| 3|
+---+
В сценарии 2, поскольку я не выбираю столбец из a
, а затемделая перекрестное соединение, я ожидал пустой фрейм данных.
Сценарий 3
val c = List().map(a => col(a))
a.select(c:_*).dropDuplicates().crossJoin(b).show()
// displays
+---+
| b|
+---+
| 1|
| 2|
| 3|
+---+
Опять же, я ожидал пустой фрейм данных в Сценарии 3. Но в дополнение к результирующему фрейму данных не пустой* * * * * * * * * * * * * * * *
*1018* Я пропускаю что-то тривиальное. В каком порядке происходит select, join and dropDuplicates
? Выбор ничего не отличается от пустого фрейма данных?