2015-12-04 3 views
1

Я создаю RDD из текстового файла. Некоторые строки не соответствуют формату, который я ожидаю, и в этом случае я использую маркер -1.Удалить элементы из Spark RDD

def myParser(line): 
    try: 
     # do something 
    except: 
     return (-1, -1), -1 

lines = sc.textFile('path_to_file') 
pairs = lines.map(myParser) 

можно ли удалить строки с -1 маркером? Если нет, то каким будет обходной путь?

+2

просто использовать 'фильтр' ... нет? – Markon

+1

В Java я использую фильтр: .filter (new Function () {public Boolean call (CassandraRow row) throws Exception {return row.getString ("value"). Equals (whatIWant); } }). – Fundhor

+0

Что будет аргументом лямбда-функции. ключ, значение или оба? – Bob

ответ

2

Чистейший решение, я могу думать о том, чтобы отказаться от искаженных линий с использованием flatMap:

def myParser(line): 
    try: 
     # do something 
     return [result] # where result is the value you want to return 
    except: 
     return [] 

sc.textFile('path_to_file').flatMap(myParser) 

Смотрите также What is the equivalent to scala.util.Try in pyspark?

Вы также можете фильтровать после map:

pairs = lines.map(myParser).filter(lambda x: x != ((-1, -1), -1)) 
Смежные вопросы