#scala #apache-spark
#scala #apache-spark
Вопрос:
В чем разница между collect_list()
и array()
в spark с использованием scala?
Я вижу использование повсюду, и варианты использования мне непонятны, чтобы определить разницу.
Ответ №1:
Несмотря на то, что оба array
и collect_list
возвращают ArrayType
столбец, эти два метода сильно отличаются.
Метод array
объединяет «по столбцам» несколько столбцов в массив, тогда как collect_list
агрегирует «по строкам» в одном столбце, обычно по группам (или Window
разделам) в массив, как показано ниже:
import org.apache.spark.sql.functions._
import spark.implicits._
val df = Seq(
(1, "a", "b"),
(1, "c", "d"),
(2, "e", "f")
).toDF("c1", "c2", "c3")
df.
withColumn("arr", array("c2", "c3")).
show
// --- --- --- ------
// | c1| c2| c3| arr|
// --- --- --- ------
// | 1| a| b|[a, b]|
// | 1| c| d|[c, d]|
// | 2| e| f|[e, f]|
// --- --- --- ------
df.
groupBy("c1").agg(collect_list("c2")).
show
// --- ----------------
// | c1|collect_list(c2)|
// --- ----------------
// | 1| [a, c]|
// | 2| [e]|
// --- ----------------