在数组中转置Spark DataFrame聚合

时间:2017-11-14 07:58:38

标签: scala apache-spark

我想转换每列的DataFrame聚合值。让我用一个例子说明它:

鉴于此DataFrame:

val df = sc.parallelize(Seq(("A","B","C"), ("D", "E", "F"), ("X", "Y", "Z"), ("A", "N", "Z"))).toDF("col1", "col2", "col3")
df.show()
+----+----+----+
|col1|col2|col3|
+----+----+----+
|   A|   B|   C|
|   D|   E|   F|
|   X|   Y|   Z|
|   A|   N|   Z|
+----+----+----+

预期的输出应该是这样的:

col1: Array("A", "D", "X")
col2: Array("B", "E", "Y", "N")
col3: Array("C", "F", "Z")

考虑真正的DataFrame可能包含大约数百列。没有必要保留输出中列的顺序。

编辑:您也可以考虑在列中找到重复的元素,但只需要唯一的元素。

我正在使用带有scala 2.11的Spark 2.0.2。

有什么建议吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以应用Executing tasks: [:app:generateDebugSources, :app:generateDebugAndroidTestSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies] NullPointerException: null groupBy,但如果您的行数较高,我会怀疑其表现。

collect_set