collect_list()
和array()
在使用scala的spark中有什么区别?
我看到它们在很多地方都被使用,但是它们的用例对我来说并不清楚,不能确定它们之间的区别。
collect_list()
和array()
在使用scala的spark中有什么区别?
我看到它们在很多地方都被使用,但是它们的用例对我来说并不清楚,不能确定它们之间的区别。
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]|
// +---+----------------+