如何为 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")
我有一个从文件中读取的 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")