[英]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_value
到udf
?
您可以執行此操作以創建新的數據框。
對於必須進行哈希處理的列,我也有類似的問題。 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.