我需要使用三个非常简单的约束将索引列添加到数据框:
从0开始
是顺序的
确定性的
我确定我遗漏了一些明显的东西,因为对于这样一个简单的任务,或者使用非顺序,不确定性越来越单调的id,我发现的示例看起来非常复杂。我不想使用index压缩,然后不得不将以前分开的列现在分开放在单列中,因为我的数据帧在TB中,这似乎是不必要的。我不需要按任何分区,也不需要按任何顺序进行分区,而我所找到的示例可以做到这一点(使用窗口函数和row_number)。我需要的只是一个简单的0到df.count整数序列。我在这里想念什么?
我的意思是:如何添加有序,单调递增1序列0:df.count的列?(来自评论)
您可以row_number()在此处使用,但为此您需要指定一个orderBy()。由于您没有订购列,因此请使用monotonically_increasing_id()。
from pyspark.sql.functions import row_number, monotonically_increasing_id
from pyspark.sql import Window
df = df.withColumn(
"index",
row_number().over(Window.orderBy(monotonically_increasing_id()))-1
)
Run Code Online (Sandbox Code Playgroud)
另外,row_number()从1开始,因此您必须减去1才能使其从0开始。最后一个值为df.count - 1。
我不想用索引压缩,然后不得不将以前分开的列分开,这些列现在位于单个列中
您可以使用zipWithIndex,如果你按照它与调用map,以避免所有分离出列变成一列:
cols = df.columns
df = df.rdd.zipWithIndex().map(lambda row: (row[1],) + tuple(row[0])).toDF(["index"] + cols
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1601 次 |
| 最近记录: |