python - 我正在尝试在 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。
解决方案
用逗号分隔,后跟空格,而不是逗号:
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|
+----+-----+
推荐阅读
- python - Python:使用 for 循环创建 50 个对象
- python - phantomjs 无法从 supervisord 开始
- haskell - 访问自定义数据类型 - Lambda 函数应用顺序
- compilation - 使用命令提示符编译 C 程序
- php - Laravel 设置图片路径
- java - 从python调用java时将终端输出打印到文件
- javascript - D3 退出过渡:动画在移除前向左平移
- .htaccess - 同时存在两条规则及其顺序
- java - 如果条件为真,则尝试停止执行方法时无法访问代码
- compiler-construction - 操作系统设计是否使用编译原理知识?