java - 将索引列添加到现有 Spark 的 DataFrame

标签 java apache-spark

我使用 Java 使用 Spark 1.5 进行操作。我需要将 ID/索引列附加到现有的 DataFrame,例如:

+---------+--------+
|  surname|    name|
+---------+--------+
|    Green|    Jake|
| Anderson|  Thomas|
| Corleone| Michael|
|    Marsh|   Randy|
|  Montana|    Tony|
|    Green|   Julia|
|Brenneman|    Eady|
|   Durden|   Tyler|
| Corleone|    Vito|
|   Madiro|     Mat|
+---------+--------+

我希望每一行都附加索引,范围在介于 1 和表记录数量之间。索引顺序无关紧要,任何行都必须只包含唯一 ID/索引。它可以通过转换为RDD并附加索引行并转换为修改了StructType的DataFrame来完成,但是,如果我没理解错的话,这种操作会消耗大量资源进行转换等,并且必须有其他方法。 结果必须是这样的:

+---------+--------+---+
|  surname|    name| id|
+---------+--------+---+
|    Green|    Jake|  3|
| Anderson|  Thomas|  5|
| Corleone| Michael|  2|
|    Marsh|   Randy| 10|
|  Montana|    Tony|  7|
|    Green|   Julia|  1|
|Brenneman|    Eady|  2|
|   Durden|   Tyler|  9|
| Corleone|    Vito|  4|
|   Madiro|     Mat|  6|
+---------+--------+---+

谢谢。

最佳答案

我知道这个问题可能是很久以前的问题了,但你可以按如下方式做:

from pyspark.sql.window import Window  
w = Window.orderBy("myColumn") 
withIndexDF = originalDF.withColumn("index", row_number().over(w))
  • myColumn:数据框中的任何特定列。
  • originalDF:没有索引列的原始DataFrame。

关于java - 将索引列添加到现有 Spark 的 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38875599/

相关文章:

java - 在mapbox android中添加数字到标记

java - 如何在运行时更改 log4j2 的配置文件?

java - 是否每个类都需要添加到 list 中?

java - Apache POI 3.9 : WorkbookFactory method not found

hive - 无法从 Spark 查询 Hive 表

java - Java 的艺术与科学第 4 章,练习 8

scala - 导入没有 SparkSession 实例的隐式转换

apache-spark - Pyspark 将带有日期和月份名称的日期时间字段解析为时间戳

apache-spark - Spark Streaming 中的 RDD 分区

apache-spark - 有关 Spark rdd.saveAsObjectFile 文件格式的文档