Apache spark 为spark数据帧中两列的一对值的组合创建唯一id
我有一个由六列组成的spark数据框架,比如说(col1,col2,…col6)。我想为“col1”和“col2”中的每个值组合创建一个唯一的id,并将其添加到数据帧中。有人能帮我介绍一下pyspark代码吗?你可以使用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
单调递增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...|
+---+---+---+--------------------+