dataframe - pyspark 用空索引添加 0
问题描述
我有如下数据框:
+--------+---------+---------+
| name | index | score |
+--------+---------+---------+
| name0 | 0 | 50 |
| name0 | 2 | 90 |
| name0 | 3 | 100 |
| name0 | 5 | 85 |
| name1 | 1 | 65 |
| name1 | 2 | 50 |
| name1 | 3 | 70 |
+--------+---------+---------+
并且索引应该是0~5,所以我想要得到的是:
+--------+---------+---------+
| name | index | score |
+--------+---------+---------+
| name0 | 0 | 50 |
| name0 | 1 | 0 |
| name0 | 2 | 90 |
| name0 | 3 | 100 |
| name0 | 4 | 0 |
| name0 | 5 | 85 |
| name1 | 0 | 0 |
| name1 | 1 | 65 |
| name1 | 2 | 50 |
| name1 | 3 | 70 |
| name1 | 4 | 0 |
| name1 | 5 | 0 |
+--------+---------+---------+
我想在空索引中填充 0,但我不知道。
有什么解决办法吗?请考虑我不使用熊猫。
解决方案
使用一系列索引交叉连接名称,然后使用名称和索引左连接到原始数据框,并将空值替换为 0。
spark.conf.set("spark.sql.crossJoin.enabled", True)
df2 = (df.select('name')
.distinct()
.join(spark.range(6).toDF('index'))
.join(df, ['name', 'index'], 'left')
.fillna({'score': 0})
)
df2.show()
+-----+-----+-----+
| name|index|score|
+-----+-----+-----+
|name0| 0| 50|
|name0| 1| 0|
|name0| 2| 90|
|name0| 3| 100|
|name0| 4| 0|
|name0| 5| 85|
|name1| 0| 0|
|name1| 1| 65|
|name1| 2| 50|
|name1| 3| 70|
|name1| 4| 0|
|name1| 5| 0|
+-----+-----+-----+
推荐阅读
- reactjs - 不显示空状态
- swift - Swift Codable:不同的编码/编码策略
- rust - 包含原始指针的结构可以实现 Send 并且是 FFI 安全的吗?
- nested - 包括多个嵌套关系的联盟分形
- peoplesoft - 为什么要在 AWE 中使用 Route Controls 而不是 Steps
- oracle - 如何使用 DBMS_STATS.set_table_prefs 将具有相同所有者的多个表的 Incemental 设置为 true?
- babeljs - 在 Ubuntu 16.0.4 上安装 Babel
- bash - 如何回显某些内容并读取用户输入,然后在同一行上回显某些内容?
- android - Android NDK突然很慢
- c++ - 使用宏定义打印格式参数