我有一个列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|
+---+-------+----+