2014-11-04 2 views
1

Примечание: Этот вопрос связан с Spark с использованием Python (Python), а не просто обычного Python. Он использует объекты RDD, а не просто списки Python.Как я могу форматировать данные?

Итак, у меня есть список актеров вместе с их литыми фильмами. Я хочу создать пары ключевых значений, где ключ является актером, а значения - это фильмы, в которых он работал. Формат данных таков, что у вас есть вкладка актера, разделенная с фильмом, в котором он работал. Если он работал в большем количестве фильмов, например, в случае Abalov Eduard, дополнительные фильмы перечислены в строках под ним. Я уже извлек данные из файла в формате, показанном ниже. Тем не менее, я хочу, чтобы имя актера появилось во всех фильмах, которые он работал, поэтому я могу просто вызвать функцию карты для создания пар значений. Так, например, для Абалова Эдуарда, я хочу, чтобы его имя появилось во всех его фильмах. Например, вместо

[u'', u'', u'', u'Severnaya rapsodiya (1974)'] 

Я хочу

[u'Abalov, Eduard', u'Severnaya rapsodiya (1974)'] 

Как я могу это сделать? Нужно ли использовать mappartitions? Или есть более простой способ достичь этого?

[ 
[u'Abalos, Rogelio', u'', u'Sa pagitan ng dalawang mata (1963) <22>'], 
[u''], 
[u'Abalos, Ronald A.', u'Alchemy (2013) [Group Member] <21>'], 
[u''], 
[u'Abalos, Tarzan', u'', u'Bagong buwan (2001) [MILF Group] <82>'], 
[u''], 
[u'Abalov, Eduard', u'', u'Chistye prudy (1965) (as E. Abalov)'], 
[u'', u'', u'', u'Novye priklyucheniya neulovimykh (1968) (as E. Abalov)'], 
[u'', u'', u'', u'Severnaya rapsodiya (1974)'], 
[u'', u'', u'', u'Stoyanka poyezda - 2 minuty (1972) (TV)'], 
[u'', u'', u'', u'Stryapukha (1965) (as E. Abalov)'], 
[u'', u'', u'', u'"12 stulev" (1977) (as E. Abalov)'], 
[u''], 
[u'Abalyan, I.', u'', u'Ne delayte biskvity v plokhom nastroenii (2003)'] 
] 
+1

Просто держать дополнительную переменную с именем последнего актера видели. Если в новом списке нет актера, добавьте его. Вы можете обновить существующий список или сделать это, когда будете строить свой dict. – tdelaney

+0

Я использую Pyspark для искры, а не обычный питон. Я работаю над объектами RDD, а не с обычными списками. – MetallicPriest

ответ

0
actordata = [[u'.....' ]] 
clean_data = [] 
last_actor = None 
for item in actordata: 
    if len(item) < 1: # ignore the [u''] 
     continue 
    last_actor = item[0] if item[0] != u'' else last_actor 
    clean_data.append([last_actor, item[-1]]) 
+0

В простом python это сработает, но я использую Spark (Pyspark). – MetallicPriest

Смежные вопросы