我在分組資料和添加索引時遇到問題。
將添加一個新的列索引,從 1 開始到 n(例如:5)并再次從 1 開始迭代。該值可以是任何值,因此基本上每 n 條記錄后,索引應以 1 重新啟動。
原始資料框
| 城市 | ID |
|---|---|
| 紐約市 | 101 |
| 澤西城 | 102 |
| 霍博肯 | 103 |
| 水牛 | 104 |
| 費城 | 105 |
| 愛迪生 | 106 |
輸出資料幀應該看起來像
| 城市 | ID | 指數 |
|---|---|---|
| 紐約市 | 101 | 1 |
| 澤西城 | 102 | 2 |
| 霍博肯 | 103 | 3 |
| 水牛 | 104 | 4 |
| 費城 | 105 | 5 |
| 愛迪生 | 106 | 1 |
| 特倫頓 | 107 | 2 |
uj5u.com熱心網友回復:
嘗試這個:
data
.withColumn("groupId", ceil(col("id") / lit(5)))
.withColumn("index", row_number() over Window.partitionBy("groupId").orderBy("id"))
.drop(col("groupId"))
輸出(已測驗):
----------- --- -----
| city| id|index|
----------- --- -----
| NYC|101| 1|
|Jersey City|102| 2|
| Hoboken|103| 3|
| Buffalo|104| 4|
| Philly|105| 5|
| Edison|106| 1|
| Trenton|107| 2|
----------- --- -----
uj5u.com熱心網友回復:
你在 spark 中試過 ntile 嗎?它將確保您始終將 id 放入 5 個排名 1 到 5 的桶中。
WindowSpec window = Window.orderBy(col("id").asc());
dataset.withColumn("index", ntile(5).over(window)).show();
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/360754.html
上一篇:如何在SparkStructuredStreaming中向DataFrame添加幾列(仍未填充)
下一篇:Spark將資料寫回HDFS
