python - 如何从pyspark中的数据框的值创建列
问题描述
我有一个包含以下值的 df,想为 df 中存在的每个值创建列。在 pyspark 中寻找解决方案。基本上我可以在 pyspark 中用一个案例来做这件事,寻找不同的方法。任何建议都会有所帮助。
东风:
|number|color|
|------|-----|
|123 |red |
|234 |blue |
|555 |white|
预期输出:
数字 | 红色的 | 蓝色的 | 白色的 |
---|---|---|---|
123 | 1 | 0 | 0 |
234 | 0 | 1 | 0 |
555 | 0 | 0 | 1 |
解决方案
您可以分组依据number
、透视依据color
和应用该lit(1)
值。要删除空值,请应用[dataframe].na.fill(0)
import pyspark.sql.functions as f
df = spark.createDataFrame([
[123, 'red'],
[234, 'blue'],
[555, 'white']
], ['number', 'color'])
pivot_df = df.groupBy('number').pivot('color').agg(f.lit(1))
pivot_df = pivot_df.na.fill(0)
(pivot_df
.select('number', 'red', 'blue', 'white')
.sort('number')
.show(truncate=False))
# +------+---+----+-----+
# |number|red|blue|white|
# +------+---+----+-----+
# |123 |1 |0 |0 |
# |234 |0 |1 |0 |
# |555 |0 |0 |1 |
# +------+---+----+-----+
推荐阅读
- javascript - 重构三元运算符
- python - Django 数据质量监控:基于设置文件“构建”查询的最佳方法?
- python - 你如何制作一个程序来检测数组中的一个单词是否是异形?那会将其输出为真假?
- sparse-matrix - Numba 是否支持“multi_dot”方面的多个字典乘法?
- keycloak - Keycloak Infinispan 缓存复制不起作用
- angular - Angular Material Snackbar在登录后不起作用
- ios - pod 安装后 (Gem::MissingSpecError)
- python - Pyspark:通过重复加入具有不同行数的 2 个数据帧
- c# - 有没有办法 Geolocation.GetLastKnownLocationAsync(); 不在使用 xamarin 的 android 项目中返回 null
- android - 如果没有您的设备不支持的 google play 服务,获取应用程序将无法运行,仅适用于中国地区