首页 >数据库 >mysql教程 >如何在 Spark RDD 中生成连续行号,类似于 SQL 的'row_number()”?

如何在 Spark RDD 中生成连续行号,类似于 SQL 的'row_number()”?

Barbara Streisand
Barbara Streisand原创
2024-12-20 05:40:09834浏览

How to Generate Sequential Row Numbers in Spark RDDs, Similar to SQL's `row_number()`?

如何在 Spark RDD 中复制 SQL 的行编号

理解问题

你想要为 Spark RDD 中的每个条目生成连续的行号,按特定列排序并分区通过一个关键列。类似于 SQL 的 row_number() over (partition by ... order by ...),但使用 Spark RDD。

您的初始尝试

您的初始尝试使用sortByKey 和 zipWithIndex,它们没有生成所需的分区行号。请注意,sortBy 并不直接适用于 RDD,需要您先收集它们,从而导致非 RDD 输出。

使用 Spark 1.4 的解决方案

数据准备

使用 (K, (col1, col2, col3)).

val sample_data = Seq(((3,4),5,5,5),((3,4),5,5,9),((3,4),7,5,5),((1,2),1,2,3),((1,2),1,4,7),((1,2),2,2,3))
val temp1 = sc.parallelize(sample_data)

生成分区行号

在分区窗口上使用 rowNumber 为每个键生成行号:

import org.apache.spark.sql.functions._

temp1.toDF("key", "col1", "col2", "col3").withColumn("rownum", rowNumber() over (Window partitionBy "key" orderBy desc("col2"), "col3")))

示例输出

+---+----+----+----+------+
|key|col1|col2|col3|rownum|
+---+----+----+----+------+
|1,2|1   |4   |7    |2     |
|1,2|1   |2   |3    |1     |
|1,2|2   |2   |3    |3     |
|3,4|5   |5   |5    |1     |
|3,4|5   |5   |9    |2     |
|3,4|7   |5   |5    |3     |
+---+----+----+----+------+

以上是如何在 Spark RDD 中生成连续行号,类似于 SQL 的'row_number()”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn