python-3.x - 如何在 PySpark 数据框中为该列中存在的所有唯一值查找列的分布?
问题描述
我有一个 PySpark 数据框-
df = spark.createDataFrame([
("u1", 0),
("u2", 0),
("u3", 1),
("u4", 2),
("u5", 3),
("u6", 2),],
['user_id', 'medals'])
df.show()
输出-
+-------+------+
|user_id|medals|
+-------+------+
| u1| 0|
| u2| 0|
| u3| 1|
| u4| 2|
| u5| 3|
| u6| 2|
+-------+------+
我想为所有用户获取奖牌列的分布。因此,如果奖牌列中有 n 个唯一值,我希望输出数据框中的 n 列具有相应数量的获得那么多奖牌的用户。
上面给出的数据的输出应该看起来像 -
+------- +--------+--------+--------+
|medals_0|medals_1|medals_2|medals_3|
+--------+--------+--------+--------+
| 2| 1| 2| 1|
+--------+--------+--------+--------+
我如何实现这一目标?
解决方案
这很简单pivot
:
df.groupBy().pivot("medals").count().show()
+---+---+---+---+
| 0| 1| 2| 3|
+---+---+---+---+
| 2| 1| 2| 1|
+---+---+---+---+
如果您需要一些化妆品来在列名称中添加单词奖牌,那么您可以这样做:
medals_df = df.groupBy().pivot("medals").count()
for col in medals_df.columns:
medals_df = medals_df.withColumnRenamed(col, "medals_{}".format(col))
medals_df.show()
+--------+--------+--------+--------+
|medals_0|medals_1|medals_2|medals_3|
+--------+--------+--------+--------+
| 2| 1| 2| 1|
+--------+--------+--------+--------+
推荐阅读
- python - 使用 Python 在 Keyence Sensor 和 PC 之间进行以太网/IP 通信
- java - 如何根据卡片类型重新排列arraylist中的对象
- html - 单击与多选项卡内容集成的按钮后如何保持:active css样式
- json - Graphql API 的 Informatica HTTP 转换中的 JSON 解析错误
- excel - Excel VSTO 在开发过程中崩溃,无法回头。选项卡未显示。恢复到上一个工作版本没有成功
- c# - 在 Azure 应用服务 Web 作业中使用 X509KeyStorageFlags.EphemeralKeySet 时出错
- vue.js - Lambda 函数不会在 cognito 事件后触发
- authentication - 从 python 转换为 Google 应用程序脚本的 Kraken API 身份验证示例未返回相同的输出
- unit-testing - android,如何对使用 doAsync() 的 BroadcastReceiver 进行单元测试
- excel - 如何修改我的宏以插入多张照片并将它们放置在 Excel 中?