繁体   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