我的数据帧:
+-----+--------+-------+
| val | id | reRnk |
+-----+--------+-------+
| 2 | a | yes |
| 1 | b | no |
| 3 | c | no |
| 8 | d | yes |
| 7 | e | yes |
| 9 | f | no |
+-----+--------+-------+
在我想要的输出中,我将仅对reRnk==是的列进行重新排序;val";我不想更改reRnk=no的行,例如,在id=b处,我们有reRnk=no。我只想将该行保留在第2行。我想要的输出是这样的:
+-----+--------+-------+
| val | id | reRnk |
+-----+--------+-------+
| 8 | d | yes |
| 1 | b | no |
| 3 | c | no |
| 7 | e | yes |
| 2 | a | yes |
| 9 | f | no |
+-----+--------+-------+
根据我所读到的内容,pyspark DF默认情况下没有索引。您可能需要添加此项。
我不知道pyspark的确切语法,但由于它与panda有很多相似之处,这可能会引导你走向某个方向:
df.loc[df.reRnk == 'yes', ['val','id']] = df.loc[df.reRnk == 'yes', ['val','id']].sort_values('val', ascending=False).set_index(df.loc[df.reRnk == 'yes', ['val','id']].index)
基本上,我们在这里所做的是用reRnk == 'yes'
隔离行,对这些值进行排序,但将索引重置为其原始索引。然后,我们将这些新值分配给df中的原始行。
对于CCD_ 2,https://spark.apache.org/docs/3.2.0/api/python/reference/pyspark.pandas/api/pyspark.pandas.DataFrame.loc.html也许值得一试。
对于.sort_values
,请参见:https://sparkbyexamples.com/pyspark/pyspark-orderby-and-sort-explained/