Scala GroupBy ID,然后根据行内的值创建列

Scala GroupBy ID,然后根据行内的值创建列,scala,apache-spark,dataframe,Scala,Apache Spark,Dataframe,我正在尝试转换此spark数据帧: ID STATUS COUNT a 1 3 a 2 2 b 2 4 c 3 5 d 1 3 d 2 3 为此: +---+---+---+---+ | ID| 1| 2| 3| +---+---+---+---+ | a| 3| 2| 0| | b| 0| 4| 0| | c| 0| 0| 5| | d| 3|

我正在尝试转换此spark数据帧:

ID  STATUS  COUNT
a     1      3
a     2      2
b     2      4
c     3      5
d     1      3
d     2      3
为此:

+---+---+---+---+
| ID|  1|  2|  3|
+---+---+---+---+
|  a|  3|  2|  0|
|  b|  0|  4|  0|
|  c|  0|  0|  5|
|  d|  3|  3|  0|
+---+---+---+---+
我对这方面比较陌生,我想按照以下思路做一些事情:

df.withColumnRenamed("1", udf_sum_val1)
  .withColumnRenamed("2", udf_sum_val2)
  .withColumnRenamed("2", udf_sum_val3)
然后进行分组,并对所有值求和


然后做一些分组,但这感觉不正确。我想知道是否有人能提出更好的方法?

不确定你想做什么(你的例子有点不清楚),但听起来像是旋转:

val df = Seq(
  ("a", 1, 3),
  ("a", 2, 2),
  ("b", 2, 4),
  ("c", 3, 5),
  ("d", 1, 3),
  ("d", 2, 3)
).toDF("ID", "STATUS", "COUNT")

df
  .groupBy($"ID")
  .pivot("STATUS")
  .agg(sum($"COUNT"))
  .na.fill(0)
  .orderBy($"ID")
  .show()

+---+---+---+---+
| ID|  1|  2|  3|
+---+---+---+---+
|  a|  3|  2|  0|
|  b|  0|  4|  0|
|  c|  0|  0|  5|
|  d|  3|  3|  0|
+---+---+---+---+

您需要的是旋转,再见,谢谢!我一点也不熟悉这个。我正要把所有的栏目都加上计数,然后计算一个总数——这要干净得多。出于好奇,你介意告诉我有什么不清楚的地方吗(不是争论,只是想得到建设性的批评)。我正确地旋转了表格,我觉得我放了足够的数据来澄清问题。我只是不知道如何处理这个问题。@NutellaAddict Well
a
在您的预期输出中出现两次,而
c
d
则缺失。您没有描述要实现的逻辑,以从给定的inputDoh获得预期的输出!我没有注意到。谢谢,为未来读者更新。