所以我希望我的 Spark 应用程序从 Amazon 的 S3 中读取一些文本。我写了以下简单的脚本:
import boto3
s3_client = boto3.client('s3')
text_keys = ["key1.txt", "key2.txt"]
data = sc.parallelize(text_keys).flatMap(lambda key: s3_client.get_object(Bucket="my_bucket", Key=key)['Body'].read().decode('utf-8'))
当我这样做时
data.collect
我收到以下错误:TypeError: can't pickle thread.lock objects
而且我似乎没有在网上找到任何帮助。也许有人设法解决了上述问题?
最佳答案
您的 s3_client 不可序列化。
使用 mapPartitions 代替 flatMap,并在 lambda 主体内初始化 s3_client 以避免开销。那将:
关于python - Apache Spark 读取 S3 : can't pickle thread. 锁对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40674544/