【问题标题】:How can I generate the same UUID for multiple dataframes in spark?如何在 spark 中为多个数据帧生成相同的 UUID?
【发布时间】:2021-05-14 03:22:05
【问题描述】:

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

【问题讨论】:

    标签: python pyspark azure-databricks


    【解决方案1】:

    Spark 使用惰性求值机制,当您调用 show 或其他操作时会调用计算。这意味着每次调用操作时,都会重新计算 uuid。为了避免这种情况 你需要cachedf,然后再打电话给createOrReplaceTempView,这是你应该做的

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

    【讨论】:

    • 根据数据量.cache 没有必要会有帮助。
    • 为什么?如果我有大量数据会怎样?
    • @JS noob 可能他的意思是当数据太大而无法保存在内存中时,cache 将无济于事。但我相信,如果没有实验,如果cache 的配置设置为MEMORY_AND_DISK,Spark 会将数据缓存在内存和磁盘中。所以缓存数据可能仍然有用。
    猜你喜欢
    • 2016-07-24
    • 2015-05-16
    • 1970-01-01
    • 2015-09-30
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多