Scala Spark collect_list()与array()的区别

4

collect_list()array()在使用scala的spark中有什么区别?

我看到它们在很多地方都被使用,但是它们的用例对我来说并不清楚,不能确定它们之间的区别。

1个回答

22
尽管 arraycollect_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]|
// +---+----------------+

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接