2016-05-19 4 views
0

Я хотел бы уронить элементы полностью, как такКак удалить элементы?

scala> sc.parallelize(List("abc","def","","ge","","wer")).map(x => if(x!="") x).collect 
res0: Array[Any] = Array(abc, def,(), ge,(), wer) 

, но, как можно видеть, что я где не в состоянии опускать «» полностью. Все еще(). Также не работает:

scala> sc.parallelize(List("abc","def","","ge","","wer")).map(x => if(x!="") x else None).collect 
res1: Array[java.io.Serializable] = Array(abc, def, None, ge, None, wer) 

или

scala> sc.parallelize(List("abc","def","","ge","","wer")).map(x => if(x!="") x else Nil).collect 
res2: Array[java.io.Serializable] = Array(abc, def, List(), ge, List(), wer) 

В качестве альтернативы можно использовать flatMap, который, как и все записи может возвращать 0 для многих элементов на оригинальный элемент. Но

scala> sc.parallelize(List("abc","def","","ge","","wer")).flatMap(x => if(x!="") x else Nil).collect 
res3: Array[Char] = Array(a, b, c, d, e, f, g, e, w, e, r) 


scala> sc.parallelize(List("abc","def","","ge","","wer")).flatMap(x => if(x!="") x).collect 
<console>:28: error: type mismatch;                        
found : Unit                             
required: TraversableOnce[?]               sc.parallelize(List("abc","def","","ge","","wer")).flatMap(x => if(x!="") x).collect 

Как я могу получить Array("abc","def","ge","wer")?

+0

Вы можете использовать 'filter' вместо' map'. –

ответ

1
sc.parallelize(List("abc","def","","ge","","wer")).filter(!_.isEmpty).collect 
3

Один из способов использования flatMap на Option,

rdd.flatMap(s => if (s.nonEmpty) Some(s) else None).collect 
+0

Также очень хороший ответ - пригодится позже, как я уверен. – Make42

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