spark-find两个不同列中每个不同值的总出现次数

rqcrx0a6  于 2021-05-24  发布在  Spark
关注(0)|答案(2)|浏览(308)

我想找出col1和col2中每个不同值的总出现次数

col1   col2    
a        a      
a        c

结果

Id       count
a          3    
c          1

如果这是sql,我会这样做

select id, sum(count) from ( Select  col1 as id, count(*) as count from table group by col1 union all Select  col2 as id, count(*) as count from table group by col2) group by id

我是新来的。我需要帮助来找到一个有效的方法。

fcg9iug3

fcg9iug31#

可以对包含两列的数组使用explode函数,如下所示:

input
  .select("col1", "col2")
  .withColumn("Id", explode(array(col("col1"), col("col2"))))
  .groupBy("Id")
  .count()
  .show()

将打印:

+---+-----+
|Id |count|
+---+-----+
|c  |1    |
|a  |3    |
+---+-----+

此解决方案防止spark计算两倍于输入Dataframe的值

v9tzhpje

v9tzhpje2#

你可以简单地
union col1 以及 col2 作为一个新的 id 列,然后按其分组:

df.select(col("col1").alias("id"))
  .unionAll(df.select(col("col2").alias("id")))
  .groupBy("id")
  .count()
  .show()

打印内容:

+---+-----+
| id|count|
+---+-----+
|  c|    1|
|  a|    3|
+---+-----+

相关问题