pyspark添加索引为空的0

jgwigjjp  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(319)

我有如下Dataframe:

+--------+---------+---------+
|  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,但我不知道。
有什么解决办法吗?请考虑我不使用Pandas。

n6lpvg4x

n6lpvg4x1#

将名称与一系列索引交叉联接,然后使用名称和索引左联接到原始Dataframe,并将null替换为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|
+-----+-----+-----+

相关问题