簡體   English   中英

如何將Spark Dataframe列的每個值作為字符串傳遞給python UDF?

[英]How to pass each value of Spark Dataframe column as string to python UDF?

我正在嘗試GPG加密FName數據框列FName

df = spark.createDataFrame([('Andy', 'NY'), ('Bob', 'PA'), ('Cindy', 'DC')], ("FName", "City"))

我創建了一個udf,它接受字符串值作為輸入,並給出加密的字符串作為輸出。

gpg = gnupg.GPG(gnupghome='/home/testgpguser/gpghome')
encrypt_str = udf(lambda string_value: gpg.encrypt(string_value, 'myrecepeintemailid', passphrase='mypassphrase'))

我正在應用我的udf,如下所示:

df = df.withColumn('Encrypted_FName', encrypt_str(col('FName')))

但是,我想整個列都通過了,並且它沒有正確加密值。

如何通過數據幀的每個值循環,把它作為string_valueudf

您可以執行此操作以創建新的數據框。

對於必須進行哈希處理的列,我也有類似的問題。 python函數定義如下:

def make_hash(txt):
    import hashlib
    m = hashlib.sha256()
    m.update(txt.encode())
    print ("hashed ", m)
    return m.hexdigest()  

定義一個udf:

from pyspark.sql.functions import udf
u_make_hash = udf(make_hash)    

並創建了一個新的DataFrame,其中包含除哈希列之外的所有列:

streamingOutputDF = streamingInputDF.select(u_make_hash(streamingInputDF['connectionDeviceId']).alias("Id"), streamingInputDF['*']) \
                                    .drop("connectionDeviceId")   

我沒有檢查您的udf,假設可以,請執行以下語句:

dfnew = df.select((encrypt_str['FName']).alias("Encrypted_FName"))

嘗試使用DataFrame.columns循環

for col_name in df.columns:
    df = df.withColumn('Encrypted_{}'.format(col_name), encrypt_str(col(col_name)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM