Надеюсь, я правильно понял ваш вопрос;
Вы можете попробовать следующее:
import org.apache.spark.sql.{functions => F}
val df = Seq(("a", 1, 1), ("b", 2, 10), ("a1", 4, 10))
df.select(F.collect_set("_1"), F.collect_set("_2"), F.collect_set("_3")).show
Результаты:
+---------------+---------------+---------------+
|collect_set(_1)|collect_set(_2)|collect_set(_3)|
+---------------+---------------+---------------+
| [a1, b, a]| [1, 2, 4]| [1, 10]|
+---------------+---------------+---------------+
Код выше должен быть более эффективным, чем намеченный select distinct
столбец за столбцом по нескольким причинам:
- Меньше рабочих-организаторов.
- Отключение должно быть выполнено локально на работнике до разъединения между работниками.
Надеюсь, это поможет!