我想在我的数据框中添加一个带有生成ID的列。我试过了:
{{1}}
但是,当我这样做时,没有任何内容写入我的输出目录。当我删除这些行时,一切正常,所以必须有一些错误,但我在控制台中看不到任何内容。
我尝试过使用monotonically_increasing_id()而不是生成UUID,但在我的测试中,这会产生许多重复项。我需要一个唯一的标识符(不一定是UUID)。
我该怎么做?
答案 0 :(得分:1)
请试试这个:
import uuid
from pyspark.sql.functions import udf
uuidUdf= udf(lambda : str(uuid.uuid4()),StringType())
Df1 = Df.withColumn("id",uuidUdf())
注意:添加新列后,您应该分配给新的DF。 ( Df1 = Df.withColumn(....)
答案 1 :(得分:1)
来自pyspark
的{{1}}:
注意:默认情况下,用户定义的函数被认为是确定性的。由于优化,与查询中存在的重复调用相比,可以消除重复调用,甚至可以多次调用函数。如果您的函数不确定,请在用户定义的函数上调用
functions.py
。例如:
asNondeterministic
因此对于UUID,这将是:
from pyspark.sql.types import IntegerType
import random
random_udf = udf(lambda: int(random.random() * 100), IntegerType()).asNondeterministic()
及其用法:
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType
import uuid
random_udf = udf(lambda: str(uuid.uuid4()), StringType()).asNondeterministic()
答案 2 :(得分:0)
请使用lit
函数,以便为所有记录生成相同的ID。
lit
仅执行一次该功能,并获取列值并将其添加到每条记录。
>>> df.show(truncate=False)
+---+
|x |
+---+
|0 |
|1 |
|2 |
|3 |
|4 |
|5 |
|6 |
|7 |
|8 |
|9 |
+---+
>>> import uuid
>>> id = str(uuid.uuid4())
>>> df = df.withColumn("id", lit(id))
>>> df.show(truncate=False)
+---+------------------------------------+
|x |id |
+---+------------------------------------+
|0 |923b69d6-4bee-423d-a892-79162df5684d|
|1 |923b69d6-4bee-423d-a892-79162df5684d|
|2 |923b69d6-4bee-423d-a892-79162df5684d|
|3 |923b69d6-4bee-423d-a892-79162df5684d|
|4 |923b69d6-4bee-423d-a892-79162df5684d|
|5 |923b69d6-4bee-423d-a892-79162df5684d|
|6 |923b69d6-4bee-423d-a892-79162df5684d|
|7 |923b69d6-4bee-423d-a892-79162df5684d|
|8 |923b69d6-4bee-423d-a892-79162df5684d|
|9 |923b69d6-4bee-423d-a892-79162df5684d|
+---+------------------------------------+
使用udf
不能解决该函数,因为该函数在每一行都被调用,而最终每次调用都会得到新的uuid。
>>> df1 = df.withColumn("id",uuidUdf())
>>> uuidUdf= udf(lambda : str(uuid.uuid4()),StringType())
>>> df1 = df.withColumn("id",uuidUdf())
>>> df1.show(truncate=False)
+---+------------------------------------+
|x |id |
+---+------------------------------------+
|0 |6d051ec6-b91a-4c42-b37c-707a293f1dc8|
|1 |cd3c75b1-8a06-461b-82ae-51f4354296bd|
|2 |3996a022-de99-4403-9346-74e66210f9ef|
|3 |ad57a9c4-5c67-4545-bef6-77d89cff70d5|
|4 |5c9a82a1-323e-4ce0-9082-e36c5a6f61db|
|5 |7a64ee81-4c84-43d0-ab7d-0a79ed694950|
|6 |a0fb26e7-cf1a-445d-bd26-10dc453ddc1e|
|7 |435a7e6a-da22-4add-8953-b5c56b01c790|
|8 |fd3c5fd8-c9d5-4725-b32a-f3ce9386b9b8|
|9 |2291cc67-47cf-4921-80ec-b4180c73533c|
+---+------------------------------------+