gpt4 book ai didi

python - PySpark:PicklingError:无法序列化对象:TypeError:无法 pickle CompiledFFI 对象

转载 作者:太空宇宙 更新时间:2023-11-03 11:19:30 28 4
gpt4 key购买 nike

我是 PySpark 环境的新手,在尝试使用加密模块加密 RDD 中的数据时遇到错误。这是代码:

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('encrypt').getOrCreate()

df = spark.read.csv('test.csv', inferSchema = True, header = True)
df.show()
df.printSchema()

from cryptography.fernet import Fernet
key = Fernet.generate_key()
f = Fernet(key)

dfRDD = df.rdd
print(dfRDD)
mappedRDD = dfRDD.map(lambda value: (value[0], str(f.encrypt(str.encode(value[1]))), value[2] * 100))
data = mappedRDD.toDF()
data.show()

在我尝试将 value[1] 映射到 str(f.encrypt(str.encode(value[1]))) 之前,当然一切正常。我收到以下错误:

PicklingError: Could not serialize object: TypeError: can't pickle CompiledFFI objects

我没有看到太多引用此错误的资源,想看看是否有其他人遇到过它(或者如果您通过 PySpark 有推荐的列加密方法)。

最佳答案

recommended approach to column encryption

您可以考虑使用 Hive 内置加密(HIVE-5207HIVE-6329),但目前它相当有限(HIVE-7934)。

您当前的代码不起作用,因为 Fernet 对象不可序列化。您可以通过仅分发 key 来使其工作:

def f(value, key=key): 
return value[0], str(Fernet(key).encrypt(str.encode(value[1]))), value[2] * 100

mappedRDD = dfRDD.map(f)

def g(values, key=key):
f = Fernet(key)
for value in values:
yield value[0], str(f.encrypt(str.encode(value[1]))), value[2] * 100

mappedRDD = dfRDD.mapPartitions(g)

关于python - PySpark:PicklingError:无法序列化对象:TypeError:无法 pickle CompiledFFI 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45789355/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com