2016-06-16 2 views
3

Мои данные после того, как много программной очистки выглядит так (показывает частичный набор данных здесь).Удалите последовательные пробелы в линиях RDD в Spark

ABCD  A [email protected]        79 
BGDA  F [email protected]        89 

Я хотел бы, чтобы преобразовать это в следующем дальнейшего Спарке операции Dataframe

ABCD,A,[email protected],79 
BGDA,F,[email protected],89 


val reg = """/\s{2,}/""" 
val cleanedRDD2 = cleanedRDD1.filter(x=> !reg.pattern.matcher(x).matches()) 

Но это ничего не возвращает. Как найти и заменить пустые строки разделителем? Спасибо! rt

+0

Удалить регулярное выражение разделителей: 'Вэл REG = "" "\ s {2}" ""', и вы не можете использовать '. matches() ', поскольку для этого требуется полное совпадение строк. Используйте 'find()'. –

+1

Возможно, что вы хотите намного проще, например https://ideone.com/T8OSIC. –

+0

Спасибо Wiktor. Это помогло! – user1384205

ответ

1

Кажется, вы просто хотите заменить все не вертикальные пробелы в строковых данных. Я предлагаю использовать replaceAll (для замены всех вхождений текстов, соответствующих шаблону) с [\t\p{Zs}]+ regex.

Вот только в sample code:

val s = "ABCD  A [email protected]        79\nBGDA  F [email protected]        89" 
val reg = """[\t\p{Zs}]+""" 
val cleanedRDD2 = s.replaceAll(reg, ",") 
print(cleanedRDD2) 
// => ABCD,A,[email protected],79 
//  BGDA,F,[email protected],89 

А вот regex demo. [\t\p{Zs}]+ соответствует одному или нескольким вхождениям вкладки (\t) или любому пробелу Unicode от Space Separator category.

Чтобы изменить содержимое РДУ, просто использовать .map:

newRDD = yourRDD.map(elt => elt.replaceAll("""[\t\p{Zs}]+""", ",")) 
+0

Я добавил некоторые дополнительные сведения о регулярном выражении, которое я использовал. –

+0

Ваш код не использует RDD (и вы не можете использовать 'replaceAll' на всем RDD). 'map' с' replaceAll' для каждой строки будет работать, хотя –

+0

@TheArchetypalPaul: Да, я знаю, я просто разместил регулярное выражение, которое будет делать это с правильным отображением. Если вы хотите, вы можете опубликовать все решение. –