当并非所有值都出现在列中时,是否可以对 Spark 的数据框进行分组?
Is it possible to groupBy a Spark's dataframe when not all values are present in column?
例如,如果我有以下数据框
val tempDF=Seq(("a",2),("b",1),("a",3)).toDF("letter","value")
scala> tempDF.show()
+------+-----+
|letter|value|
+------+-----+
| a| 2|
| b| 1|
| a| 3|
+------+-----+
并且我想在 letter
列上执行 groupBy
操作,但我知道在 letter
列中可能还有另一个字母 c
不存在。通常我会
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
添加到数据框的情况下执行此操作?我的意思是我可以在一个列表中有很多数据框,但我不知道每个数据框缺少哪些字母(如果有的话),相反我知道应该为每个数据框出现的整个字母列表。
如果您已经知道所有可能的值,请创建一个单独的(通用)DataSet,其中 'value' 为 0。
然后将它与任何 tempDF 结合起来以添加缺失的字母。
然后对最终数据集进行 groupBy。
例如,如果我有以下数据框
val tempDF=Seq(("a",2),("b",1),("a",3)).toDF("letter","value")
scala> tempDF.show()
+------+-----+
|letter|value|
+------+-----+
| a| 2|
| b| 1|
| a| 3|
+------+-----+
并且我想在 letter
列上执行 groupBy
操作,但我知道在 letter
列中可能还有另一个字母 c
不存在。通常我会
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
添加到数据框的情况下执行此操作?我的意思是我可以在一个列表中有很多数据框,但我不知道每个数据框缺少哪些字母(如果有的话),相反我知道应该为每个数据框出现的整个字母列表。
如果您已经知道所有可能的值,请创建一个单独的(通用)DataSet,其中 'value' 为 0。 然后将它与任何 tempDF 结合起来以添加缺失的字母。 然后对最终数据集进行 groupBy。