当列中没有所有值时,是否可以对Spark的数据帧进行分组?

时间:2018-06-10 05:32:58

标签: scala apache-spark dataframe group-by missing-data

例如,如果我有以下数据框

val tempDF=Seq(("a",2),("b",1),("a",3)).toDF("letter","value")

scala> tempDF.show()
+------+-----+
|letter|value|
+------+-----+
|     a|    2|
|     b|    1|
|     a|    3|
+------+-----+

我希望对groupBy列执行letter操作,但知道列c中可能还有其他字母letter。通常我会

tempDF.groupBy("letter").sum()

scala> tempDF.groupBy("letter").sum().show()
+------+----------+                                                               
|letter|sum(value)|
+------+----------+
|     a|         5|
|     b|         1|
+------+----------+

但我想要这样的事情:

+------+----------+                                                             
|letter|sum(value)|
+------+----------+
|     a|         5|
|     b|         1|
|     c|         0|
+------+----------+

是否可以在不以某种方式将字母c添加到数据框的情况下执行此操作?我的意思是我可以在列表中包含许多数据帧但我不知道每个数据帧中缺少哪些字母(如果有的话),而是我知道应该为每个数据帧显示的整个字母列表。 / p>

1 个答案:

答案 0 :(得分:1)

如果您已经知道所有可能的值,请创建一个单独的(通用)DataSet,其中'value'为0。 然后将它与任何tempDF连接以添加缺少的字母。 然后在最终数据集上进行groupBy。