在pyspark中创建一个具有唯一值的新列



我有一个列item_id的数据框

下面是示例数据框架

+-----------+
|item_id    |
+-----------+
|     BA2C31|
|     BA2C31|
|     B4D456|
|     B4D456|
|     EDJJ88|
+-----------+
from pyspark.sql import functions as F
df = spark.createDataFrame(
[(0, 'BA2C31'),
(1, 'BA2C31'),
(2, 'B4D456'),
(3, 'B4D456'),
(4, 'EDJJ88')],
['id', 'item_id'])

我需要创建一个列与唯一值各自的item_id…每个item_id应该有一个唯一的值

from pyspark.sql.functions import col, sha2, concat
df.withColumn("u_id", sha2(col("item_id")), 256)).show(10, False)

所需输出:

+--------------------+
|item_id    | u_id
+--------------------+
|     BA2C31| 101
|     BA2C31| 101
|     B4D456| 102
|     B4D456| 102
|     EDJJ88| 103
+--------------------+

我正在使用withcolumn..但是我没有得到想要的输出

您可以使用dense_rank(),

from pyspark.sql.window import Window
from pyspark.sql.functions import dense_rank
df.withColumn("u_id", dense_rank().over(Window.orderBy("item_id")) + 100).show()
+---+-------+----+
| id|item_id|u_id|
+---+-------+----+
|  2| B4D456| 101|
|  3| B4D456| 101|
|  0| BA2C31| 102|
|  1| BA2C31| 102|
|  4| EDJJ88| 103|
+---+-------+----+

相关内容

  • 没有找到相关文章