是否可以将scala spark df中的nxn网格减少为网格的总和,并创建新的df?现有数据框:
1 1 0 0 0 0 0 0
0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 1
0 1 0 0 0 0 1 0
0 0 0 0 1 0 0 0
如果n=4,我们能从这个df中取4x4网格,求和吗?
1 1 0 0 | 0 0 0 0
0 0 0 0 | 0 0 1 0
0 1 0 0 | 0 0 0 0
0 0 0 0 | 0 0 0 0
------------------
0 0 0 0 | 0 0 0 0
0 1 0 0 | 0 0 1 1
0 1 0 0 | 0 0 1 0
0 0 0 0 | 1 0 0 0
得到这个输出?
3 1
2 4
2条答案
按热度按时间vngu2lb81#
检查以下代码。
这将把行分成2行,每组有4行数据。
将所有值收集到数组的数组中。
展平数组,删除0值并获取数组大小。
应用
rowExpr
&selectExpr
```scala> df
.withColumn("row_id",rowExpr)
.groupBy($"row_id")
.agg(aggExpr.head,aggExpr.tail:*)
.select(selectExpr:*)
.show(false)
+----+----+
|abcd|efgh|
+----+----+
|3 |1 |
|2 |4 |
+----+----+
fdx2calv2#
对于行,必须进行聚合;对于列,必须进行求和。2x2的示例代码