создание структуры световых данных из многострочной записи

Я пытаюсь прочитать в файле событий ретроспективы в искру. Файл события структурирован как таковой.

id,TEX201403310 version,2 info,visteam,PHI info,hometeam,TEX info,site,ARL02 info,date,2014/03/31 info,number,0 info,starttime,1:07PM info,daynight,day info,usedh,true info,umphome,joycj901 info,attendance,49031 start,reveb001,"Ben Revere",0,1,8 start,rollj001,"Jimmy Rollins",0,2,6 start,utlec001,"Chase Utley",0,3,4 start,howar001,"Ryan Howard",0,4,3 start,byrdm001,"Marlon Byrd",0,5,9 id,TEX201404010 version,2 info,visteam,PHI info,hometeam,TEX 

Как вы можете видеть, для каждой игры события повторяются.

Я прочитал файл в RDD, а затем через секунду для цикла добавлен ключ для каждой итерации, который, похоже, работает. Но я надеялся получить некоторые отзывы о том, есть ли способ очистки, используя искровые методы.

 logFile = '2014TEX.EVA' event_data = (sc .textFile(logfile) .collect()) idKey = 0 newevent_list = [] for line in event_dataFile: if line.startswith('id'): idKey += 1 newevent_list.append((idKey,line)) else: newevent_list.append((idKey,line)) event_data = sc.parallelize(newevent_list) 

PySpark, так как версия 1.1 поддерживает форматы ввода Hadoop. Вы можете использовать параметр textinputformat.record.delimiter для использования разделителя пользовательского формата, как textinputformat.record.delimiter ниже.

 from operator import itemgetter retrosheet = sc.newAPIHadoopFile( '/path/to/retrosheet/file', 'org.apache.hadoop.mapreduce.lib.input.TextInputFormat', 'org.apache.hadoop.io.LongWritable', 'org.apache.hadoop.io.Text', conf={'textinputformat.record.delimiter': '\nid,'} ) (retrosheet .filter(itemgetter(1)) .values() .filter(lambda x: x) .map(lambda v: ( v if v.startswith('id') else 'id,{0}'.format(v)).splitlines()))