Я отправил аналогичный вопрос около часа назад, но с тех пор удалил его после осознания того, что задал неправильный вопрос. У меня есть следующие маринованные defaultdict
:Загрузка defaultdict в Hadoop с использованием pickle и sys.stdin
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'). Я делаю это неправильно? Как загрузить информацию?
Update:
Выполнив онлайн учебник, я могу изменить свой код к этому:
def read_input(file):
for line in file:
print line
def main(separator='\t'):
myDict = read_input(sys.stdin)
Это печатает каждую строку, показывая, что успешно читает файл - однако, нет semblence из defaultdict
структуры сохраняются, при этом выходе:
p769
aS'05-Aug-13 10:19'
p770
aS'05-Aug-13 15:19'
p771
as"I love that"
Очевидно, что это не хорошо. Есть ли у кого-нибудь предложения?
В другом скрипте defaultdict был записан в файл с помощью ряда ключей (твитов), сопоставленных значениям (время их публикации). Это было сделано так, чтобы ретвиты могли иметь многократное указание, когда они были в твиттере, в отличие от обычного словаря, который мог иметь только одно значение за ключ. Pickle использовался только для того, чтобы сохранить этот файл defaultdict в файле. –
Я знаю, как использовать writerow для записи в файл csv, но то, что я пытаюсь сказать, я не знаю, как написать файл defaultdict для этого файла –
@AndrewMartin Ответ по-прежнему остается в силе: do not используйте Pickle или вы не сможете разумно обрабатывать данные с помощью Hadoop. См. [Здесь] (http://stackoverflow.com/questions/8685809/python-writing-a-dictionary-to-a-csv-file-with-one-line-for-every-key-value) для примера о том, как написать dict в файл csv. – jkovacs