繁体   English   中英

Pyspark:防止列值在计算后发生变化

[英]Pyspark: Prevent Column value from changing once calculated

我有一个 spark dataframe 用于存储为加密生成的密钥。 我使用 UDF 为每一行生成一个密钥,但是每当查询 dataframe 时,密钥就会发生变化。 我尝试将 function 包装在 lit() 中,但它仍然会发生变化。 如何使此列不可变?

代码:

def generate_key():
    encryptionKey = Fernet.generate_key().decode('utf-8')
    return encryptionKey

get_key = udf(generate_key, StringType())

def key_table(df):
    df        = df.select("id").withColumn('encKey', lit(get_key()))
    return df

Output: https://i.stack.imgur.com/8zXcv.png

每当数据被逐出 memory 并且 Spark 必须重新计算列时,Spark 中的 UDF 都会重新运行,如果您的 UDF 是deterministic的(即)在给定相同输入的情况下始终返回相同的 output,那么这不会导致任何问题。 但是,在您的情况下,UDF 是non-deterministic 解决此问题的一种方法是checkpoint dataframe,然后进一步使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM