我想为下面的dataframe添加一列行号,但保持原来的顺序。
现有的dataframe:
+-—-+
|val|
+-—-+
|1.0|
+-—-+
|0.0|
+-—-+
|0.0|
+-—-+
|1.0|
+-—-+
|0.0|
+-—-+
我的预期输出:
+-—-+-—-+
|idx|val|
+-—-+-—-+
| 1|1.0|
+-—-+-—-+
| 2|0.0|
+-—-+-—-+
| 3|0.0|
+-—-+-—-+
| 4|1.0|
+-—-+-—-+
| 5|0.0|
+-—-+-—-+
我尝试了很多代码,如下所示:
from pyspark.sql.functions import row_number,lit
from pyspark.sql.window import Window
w = Window().orderBy(lit('A'))
df = df.withColumn("row_num", row_number().over(w))
Window.partitionBy("xxx").orderBy("yyy")
但是上面的代码只是groupby
的值和设置索引,这会使我的df不按顺序排列。
我们可以只增加一列而不改变顺序吗?
2条答案
按热度按时间hl0ma9xz1#
在Apache Spark中没有顺序这样的东西,它是一个分布式系统,数据被划分为称为分区的更小的块,每个操作都将应用于这些分区,分区的创建是随机的,所以除非在orderBy()子句中指定,否则您将无法保持顺序,因此如果您需要保持顺序,则需要指定将使用哪个列来保持顺序。
wztqucjr2#
哦,只是尝试了另一种方法,它的工作,请告诉我,当我错了在一些其他情况下。
df_test01是上述 Dataframe