2017-02-01 9 views
0

Я читаю текстовый файл с разделителями с искровой scala. Я пытаюсь создать обрезку регулярного выражения для всего, прежде чем разделитель ~ и все после. В настоящее время у меня есть место, где все пробелы обрезаны. Я ищу любые предложения о том, как это сделать или улучшения. Возможно, какая-то функция обрезки будет проще.Регулярное выравнивание всех пробелов до и после разделителя Spark Scala

def truncateRDD(fileName : String): RDD[String] = { 
    val rdd = sc.textFile(fileName) 
    rdd.map(lines => lines.replaceAll("""[\t\p{Zs}]+""", "")) 
    } 

Вход:

20161111 ~  ~10~1234~ "This is an example" ~P15~-EXAMPLE~2017~ 2014567EXAMPLE 

Желаемая Выход:

20161111~~10~1234~"This is an example"~P15~-EXAMPLE~2017~2014567EXAMPLE 

ответ

2

Самый простой подход, вероятно, будет разделить ваш разделителем (~), а затем trim каждый полученный маркер; Затем - объединить маркеры обратно в одну строку с помощью mkString:

rdd.map(_.split("~").map(_.trim).mkString("~")) 

В качестве альтернативы - с помощью регулярных выражений:

rdd.map(_.replaceAll("\\s*?~\\s*", "~"))