gpt4 book ai didi

python - 使用pickle和sys.stdin在Hadoop中加载defaultdict

转载 作者:行者123 更新时间:2023-12-02 20:09:17 25 4
gpt4 key购买 nike

大约一个小时前,我发布了一个类似的问题,但是自从意识到我在问一个错误的问题之后,就将其删除。我有以下腌制的defaultdict:

ccollections
defaultdict
p0
(c__builtin__
list
p1
tp2
Rp3
V"I love that"
p4
(lp5
S'05-Aug-13 10:17'
p6
aS'05-Aug-13 10:17'

使用Hadoop时,始终使用以下命令读取输入:
for line in sys.stdin:

我尝试使用以下方法读取腌制的 defaultdict:
myDict = pickle.load(sys.stdin)
for text, date in myDict.iteritems():

但无济于事。我使用.load('filename.txt')在本地对其进行测试时,其余代码均可以正常工作。我做错了吗?如何加载信息?

更新:

遵循在线教程之后,我可以将代码修改为:
def read_input(file):
for line in file:
print line

def main(separator='\t'):
myDict = read_input(sys.stdin)

这会打印出每一行,表明它已成功读取文件-但是,此输出不保留 defaultdict结构的相似之处:
p769    

aS'05-Aug-13 10:19'

p770

aS'05-Aug-13 15:19'

p771

as"I love that"

显然这不好。有人有什么建议吗?

最佳答案

为什么输入数据为泡菜格式?您的输入数据来自哪里? Hadoop / MapReduce的目标之一是处理太大而无法容纳在一台计算机内存中的数据。因此,读取整个输入数据然后尝试对其进行反序列化会违反MR设计范式,并且极有可能甚至无法用于生产规模的数据集。

解决方案是将输入数据格式化为TSV文本文件,例如每行字典中只有一个元组。然后,您可以单独处理每个元组,例如:

for line in sys.stdin:
tuple = line.split("\t")
key, value = process(tuple)
emit(key, value)

关于python - 使用pickle和sys.stdin在Hadoop中加载defaultdict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18580321/

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