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

Python 如何为spark中的多个数据帧生成相同的UUID?,python,pyspark,azure-databricks,Python,Pyspark,Azure Databricks,我有一个从文件中读取的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("

我有一个从文件中读取的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
之前,您需要
缓存
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")


取决于数据量
。缓存
不必要会有所帮助。为什么?如果我有大量数据会发生什么?@JS noob可能他的意思是,当数据太大而无法保存在内存中时,
cache
将无济于事。但是我相信,如果没有实验,如果
缓存
的配置设置为
内存和磁盘
,Spark将在内存和磁盘中缓存数据。因此,缓存数据可能仍然有用。