Apache spark 为spark数据帧中两列的一对值的组合创建唯一id

Apache spark 为spark数据帧中两列的一对值的组合创建唯一id,apache-spark,pyspark,pyspark-sql,Apache Spark,Pyspark,Pyspark Sql,我有一个由六列组成的spark数据框架,比如说(col1,col2,…col6)。我想为“col1”和“col2”中的每个值组合创建一个唯一的id,并将其添加到数据帧中。有人能帮我介绍一下pyspark代码吗?你可以使用单调递增id(pyspark>1.6)或单调递增id(pyspark如果您确实需要从col1和col2生成唯一ID,您还可以利用Spark的sha2函数创建哈希值 首先,让我们使用以下内容生成一些虚拟数据: from random import randint max_rang

我有一个由六列组成的spark数据框架,比如说(col1,col2,…col6)。我想为“col1”和“col2”中的每个值组合创建一个唯一的id,并将其添加到数据帧中。有人能帮我介绍一下pyspark代码吗?

你可以使用
单调递增id
(pyspark>1.6)或
单调递增id
(pyspark如果您确实需要从col1和col2生成唯一ID,您还可以利用Spark的
sha2
函数创建哈希值

首先,让我们使用以下内容生成一些虚拟数据:

from random import randint

max_range = 10
df1 = spark.createDataFrame(
            [(x, x * randint(1, max_range), x * 10 * randint(1, max_range)) for x in range(1, max_range)], 
            ['C1', 'C2', 'C3'])

>>> df1.show()
+---+---+---+
| C1| C2| C3|
+---+---+---+
|  1|  1| 60|
|  2| 14|180|
|  3| 21|270|
|  4| 16|360|
|  5| 35|250|
|  6| 30|480|
|  7| 28|210|
|  8| 80|320|
|  9| 45|360|
+---+---+---+
然后从列C2和C3创建一个新的uid列,代码如下:

from pyspark.sql.functions import col, sha2, concat

df1.withColumn("uid", sha2(concat(col("C2"), col("C3")), 256)).show(10, False)
以及输出:

+---+---+---+--------------------+
| C1| C2| C3|                 uid|
+---+---+---+--------------------+
|  1|  1| 60|a512db2741cd20693...|
|  2| 14|180|2f6543dc6c0e06e4a...|
|  3| 21|270|bd3c65ddde4c6f733...|
|  4| 16|360|c7a1e8c59fc9dcc21...|
|  5| 35|250|cba1aeb7a72d9ae27...|
|  6| 30|480|ad7352ff8927cf790...|
|  7| 28|210|ea7bc25aa7cd3503f...|
|  8| 80|320|02e1d953517339552...|
|  9| 45|360|b485cf8f710a65755...|
+---+---+---+--------------------+

谢谢@Jim。这解决了我的问题,但它添加了重复的列。在上面的文章中,它再次添加了col1和col2。如何删除它们?编辑了我的答案。因为只有两列,所以我从结果中删除了它们。
+---+---+---+--------------------+
| C1| C2| C3|                 uid|
+---+---+---+--------------------+
|  1|  1| 60|a512db2741cd20693...|
|  2| 14|180|2f6543dc6c0e06e4a...|
|  3| 21|270|bd3c65ddde4c6f733...|
|  4| 16|360|c7a1e8c59fc9dcc21...|
|  5| 35|250|cba1aeb7a72d9ae27...|
|  6| 30|480|ad7352ff8927cf790...|
|  7| 28|210|ea7bc25aa7cd3503f...|
|  8| 80|320|02e1d953517339552...|
|  9| 45|360|b485cf8f710a65755...|
+---+---+---+--------------------+