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

How can I generate the same UUID for multiple dataframes in spark?

我有一个从文件中读取的 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,有没有办法让它们在每个数据帧中保持相同?

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")