Python 如何在pyspark数据帧中创建序号列?
我想在pyspark数据帧中创建从指定数字开始的序列号列。例如,我想将列A添加到我的数据帧df,它将从数据帧的长度5开始,递增1,因此5,6,7,…,长度(df)Python 如何在pyspark数据帧中创建序号列?,python,dataframe,pyspark,sequential-number,Python,Dataframe,Pyspark,Sequential Number,我想在pyspark数据帧中创建从指定数字开始的序列号列。例如,我想将列A添加到我的数据帧df,它将从数据帧的长度5开始,递增1,因此5,6,7,…,长度(df) 使用pyspark方法的一些简单解决方案?您可以使用range df_len = 100 freq =1 ref = spark.range( 5, df_len, freq ).toDF("id") ref.show(10) +---+ | id| +---+ | 5| | 6| | 7| | 8| | 9| |
使用pyspark方法的一些简单解决方案?您可以使用range
df_len = 100
freq =1
ref = spark.range(
5, df_len, freq
).toDF("id")
ref.show(10)
+---+
| id|
+---+
| 5|
| 6|
| 7|
| 8|
| 9|
| 10|
| 11|
| 12|
| 13|
| 14|
+---+
仅显示前10行三个简单步骤:
从pyspark.sql.window导入窗口
从pyspark.sql.functions导入单调递增的行号
df=df.withColumn(“row\u idx”,row\u number()。over(Window.orderBy(单调地增加\u id()))这对我很有效。这将在列中创建顺序值
seed = 23
df.withColumn('label', seed+dense_rank().over(Window.orderBy('column')))
最简单的方法可能是
df=df.rdd.zipWithIndex().toDF(cols+[“index”])。withColumn(“index”,f.col(“index”)+5)
其中cols=df.columns
和f
指的是pyspark.sql.functions
。但是你应该问问自己为什么要这样做,几乎可以肯定有更好的方法。数据帧本身是无序的,因此此操作效率不高。谢谢!最后,我想将最终结果添加到配置单元表中。我必须从这个表中获取max(id),并添加id从max(id)+1开始的新记录。我认为在配置单元中不可能获得这样的序列id列。Hive/Spark用于并行处理。尽管我的评论中的代码对您有效,您可能能够想出一种方法来实现您想要的结果,但这并不是spark或hive的一个好用例。我通过向我的df添加新列来处理它,如下所示:max(id)+spark\u func.row\u number().over(Window.orderBy(我的df中的唯一字段)
问题是添加一个“新”列添加到现有数据帧