我有一个包含 4 列 co1
、col2
、col3
和 col4
的数据框。我需要:
- 根据键
col1
和col2
对数据帧进行分组 - 然后对
col3
和col4
等其他列进行分组,并显示col3
和col4
的计数。
输入
col1 col2 col3 col4
1 1 2 4
1 1 2 4
1 1 3 5
输出
col1 col2 col_name col_value cnt
1 1 col3 2 2
1 1 col3 3 1
1 1 col4 4 2
1 1 col4 5 1
这可能吗?
最佳答案
这是类似melt
操作的情况。您可以使用 ahue 提供的实现如an answer至How to melt Spark DataFrame? .
val df = Seq(
(1, 1, 2, 4), (1, 1, 2, 4), (1, 1, 3, 5)
).toDF("col1", "col2", "col3", "col4")
df.melt(
Seq("col1", "col2"), Seq("col3", "col4"), "col_name", "col_value"
).groupBy("col1", "col2", "col_name", "col_value").count.show
// +----+----+--------+---------+-----+
// |col1|col2|col_name|col_value|count|
// +----+----+--------+---------+-----+
// | 1| 1| col3| 3| 1|
// | 1| 1| col4| 5| 1|
// | 1| 1| col4| 4| 2|
// | 1| 1| col3| 2| 2|
// +----+----+--------+---------+-----+
关于scala - 按 Spark 分组后分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50069765/