首页 > 解决方案 > 我正在尝试在 Spark 中的爆炸列上应用 groupBy

问题描述

进出口:

员工 DF

Name | Project 

| A  | p1,p2

| B   | p1
      
| C   | p2      

输出/输出:

项目 DF

| proj| Count|


| p1  | 2            |

| p2   | 2          |

我需要计算每个项目的员工人数。我尝试了下面的片段,但它没有给我正确的答案:

df = spark.createDataFrame(sc.parallelize([['A', 'p1, p2'], ['B', 'p1'], ['C', 'p2']]), ["name", "project"])
 
df2 = df.withColumn('proj',explode(split(df['project'],",")))

df2.groupBy('proj').count().show()

我的输出

| proj| Count|

| p2  | 1  

| p2   | 1  

| p1   | 2   

我不知道为什么它不在 p2 上执行 groupBy。

标签: pythondataframeapache-sparkpyspark

解决方案


用逗号分隔,后跟空格,而不是逗号:

df = spark.createDataFrame(sc.parallelize([['A', 'p1, p2'], ['B', 'p1'], ['C', 'p2']]), ["name", "project"])
 
df2 = df.withColumn('proj',explode(split(df['project'],", ")))   # <-- comma with space

df2.groupBy('proj').count().show()
+----+-----+
|proj|count|
+----+-----+
|  p2|    2|
|  p1|    2|
+----+-----+

推荐阅读