如何为spark中的多个数据帧生成相同的UUID?

2024-10-01 02:37:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个从文件中读取的df

import uuid

df = spark.read.csv(path, sep="|", header=True)

然后我给它一个UUID列

uuidUdf= udf(lambda : str(uuid.uuid4()),StringType())
df = df.withColumn("UUID",uuidUdf())

现在我创建一个视图

view = df.createOrReplaceTempView("view")

现在我创建了两个从视图中获取数据的新数据帧,这两个数据帧都将使用原始的UUID列

df2 = spark.sql("select UUID from view")
df3 = spark.sql("select UUID from view")

所有3个数据帧都有不同的UUID,有没有办法在每个数据帧中保持它们相同


Tags: csv数据pathfromimportview视图df
1条回答
网友
1楼 · 发布于 2024-10-01 02:37:10

Spark使用惰性计算机制,当您调用show或其他操作时,将调用计算。这意味着每次调用操作时,uuid都会重新计算。为了避免这种情况 在调用createOrReplaceTempView之前,您需要cache这个df,下面是您应该做的

import uuid

df = spark.read.csv(path, sep="|", header=True)
uuidUdf= udf(lambda : str(uuid.uuid4()),StringType())
df = df.withColumn("UUID",uuidUdf())

df.cache()

view = df.createOrReplaceTempView("view")

df2 = spark.sql("select UUID from view")
df3 = spark.sql("select UUID from view")

相关问题 更多 >