使用scala spark将单列转换为行

时间:2018-03-23 20:13:14

标签: scala apache-spark

我需要转换下面的表值,理想情况下,所有列C4行值都将成为列,并且将分别显示指示符

C1 C2 C3 C4
a  b  c  9
x  y  z  6
A  B  C  3

预期产出:

C1 c2 c3 9 6 3
a  b  c  1 0 0
x  v  z  0 1 0
A  B  C  0 0 1

我想用Scala和spark解决问题。 spark版本2.1.1 Scala 2.11.8版本

1 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,您可以按如下方式使用groupBy/pivot

val df = Seq(
  ("a", "b", "c", 9),
  ("x", "y", "z", 6),
  ("A", "B", "C", 3)
).toDF("C1", "C2", "C3", "C4")

df.groupBy("C1", "C2", "C3").
  pivot("C4").agg(count(struct("C1", "C2", "C3"))).
  na.fill(0).
  show
// +---+---+---+---+---+---+
// | C1| C2| C3|  3|  6|  9|
// +---+---+---+---+---+---+
// |  x|  y|  z|  0|  1|  0|
// |  a|  b|  c|  0|  0|  1|
// |  A|  B|  C|  1|  0|  0|
// +---+---+---+---+---+---+