Scala 理解pivot和agg

Scala 理解pivot和agg,scala,apache-spark,spark-dataframe,Scala,Apache Spark,Spark Dataframe,我在DataFrame df中有以下列: 我执行以下代码,希望看到第11列和第12列: 相反,我得到了第11列和第12列: 为什么?这是因为Spark仅在存在多个聚合的情况下才会将别名附加到数据透视列值中,以确保清晰: val df = Seq( (278230, 57371100, 11, 1), (278230, 57371100, 12, 2), (337790, 72031970, 11, 1), (337790, 72031970, 11, 2), (337790,

我在DataFrame df中有以下列:

我执行以下代码,希望看到第11列和第12列:

相反,我得到了第11列和第12列:


为什么?

这是因为Spark仅在存在多个聚合的情况下才会将别名附加到数据透视列值中,以确保清晰:

val df = Seq(
  (278230, 57371100, 11, 1),
  (278230, 57371100, 12, 2),
  (337790, 72031970, 11, 1),
  (337790, 72031970, 11, 2),
  (337790, 72031970, 12, 3)
)toDF("c_id", "p_id", "type", "values")

df.groupBy($"c_id", $"p_id").pivot("type").
  agg(sum("values").as("total")).
  show
// +------+--------+---+---+
// |  c_id|    p_id| 11| 12|
// +------+--------+---+---+
// |337790|72031970|  3|  3|
// |278230|57371100|  1|  2|
// +------+--------+---+---+

df.groupBy($"c_id", $"p_id").pivot("type").
  agg(sum("values").as("total"), max("values").as("max")).
  show
// +------+--------+--------+------+--------+------+
// |  c_id|    p_id|11_total|11_max|12_total|12_max|
// +------+--------+--------+------+--------+------+
// |337790|72031970|       3|     2|       3|     3|
// |278230|57371100|       1|     1|       2|     2|
// +------+--------+--------+------+--------+------+

因为它是这样实施的?没有歧义,所以值就足够了。你希望得到什么样的答案?
df
 .groupBy($"c_id",$"p_id")
 .pivot("type")
 .agg(sum("values") as "total")
 .na.fill(0)
 .show()
+-----------+----------+---+---+                                                
|       c_id|      p_id| 11| 12|
+-----------+----------+---+---+
|     278230|  57371100|  0|  1|
|     337790|  72031970|  3|  0|
|     320710|  71904400|  0|  1|
val df = Seq(
  (278230, 57371100, 11, 1),
  (278230, 57371100, 12, 2),
  (337790, 72031970, 11, 1),
  (337790, 72031970, 11, 2),
  (337790, 72031970, 12, 3)
)toDF("c_id", "p_id", "type", "values")

df.groupBy($"c_id", $"p_id").pivot("type").
  agg(sum("values").as("total")).
  show
// +------+--------+---+---+
// |  c_id|    p_id| 11| 12|
// +------+--------+---+---+
// |337790|72031970|  3|  3|
// |278230|57371100|  1|  2|
// +------+--------+---+---+

df.groupBy($"c_id", $"p_id").pivot("type").
  agg(sum("values").as("total"), max("values").as("max")).
  show
// +------+--------+--------+------+--------+------+
// |  c_id|    p_id|11_total|11_max|12_total|12_max|
// +------+--------+--------+------+--------+------+
// |337790|72031970|       3|     2|       3|     3|
// |278230|57371100|       1|     1|       2|     2|
// +------+--------+--------+------+--------+------+