簡體   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