Я хотел бы уронить элементы полностью, как такКак удалить элементы?
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")
?
Вы можете использовать 'filter' вместо' map'. –