2015-12-04 97 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

只是使用'filter' ...不是? – Markon

+1

在Java中我使用了一個過濾器:.filter(new Function (){public Boolean call(CassandraRow row)throws Exception {return row.getString(「value」)。equals(whatIWant); } } )。 – Fundhor

+0

什麼是lambda函數的參數。關鍵,價值還是兩者? – 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))