我正在尝试GPG加密spark数据帧列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
?
答案 0 :(得分:0)
您可以执行此操作以创建新的数据框。
我对必须进行散列的列有类似的问题。 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"))
答案 1 :(得分:-1)
for col_name in df.columns:
df = df.withColumn('Encrypted_{}'.format(col_name), encrypt_str(col(col_name)))