Как заменить двойные кавычки символом новой строки в Spark scala - PullRequest
0 голосов
/ 05 мая 2020

Я новичок в Spark. У меня есть огромный файл с такими данными, как -

18765967790@18765967790@T@20130629@00@31@2981546 " "18765967790@18765967790@T@20130629@19@18@3240165 " "18765967790@18765967790@T@20130629@18@18@1362836
13478756094@13478756094@T@20130629@31@26@2880701 " "13478756094@13478756094@T@20130629@19@18@1230206 " "13478756094@13478756094@T@20130629@00@00@1631440
40072066693@40072066693@T@20130629@79@18@1270246 " "40072066693@40072066693@T@20130629@79@18@3276502 " "40072066693@40072066693@T@20130629@19@07@3321860

Я пытаюсь заменить "" символом новой строки, чтобы мой вывод выглядел так:

18765967790@18765967790@T@20130629@00@31@2981546 
18765967790@18765967790@T@20130629@19@18@3240165 
18765967790@18765967790@T@20130629@18@18@1362836
13478756094@13478756094@T@20130629@31@26@2880701 
13478756094@13478756094@T@20130629@19@18@1230206 
13478756094@13478756094@T@20130629@00@00@1631440
40072066693@40072066693@T@20130629@79@18@1270246 
40072066693@40072066693@T@20130629@79@18@3276502 
40072066693@40072066693@T@20130629@19@07@3321860

Я пробовал with-

val fact1 =  sc.textFile("s3://abc.txt").map(x=>x.replaceAll("\"","\n"))

Но, похоже, это не работает. Может ли кто-нибудь сказать, что мне не хватает?

Edit1 - Моим окончательным результатом будет фрейм данных со схемой, наложенной после разделения разделителем «@».

Я получаю ниже o / p-

scala> fact1.take(5).foreach(println)
18765967790@18765967790@T@20130629@00@31@2981546

18765967790@18765967790@T@20130629@19@18@3240165

18765967790@18765967790@T@20130629@18@18@1362836
13478756094@13478756094@T@20130629@31@26@2880701

13478756094@13478756094@T@20130629@19@18@1230206

13478756094@13478756094@T@20130629@00@00@1631440
40072066693@40072066693@T@20130629@79@18@1270246

40072066693@40072066693@T@20130629@79@18@3276502

40072066693@40072066693@T@20130629@19@07@3321860

Я получаю лишние пустые строки, что еще больше беспокоит меня при создании фрейма данных. Здесь это может показаться простым, но файл огромен, а строки, содержащие "", длинные. В вопросе я поставил только 2 двойные кавычки, но их может быть больше 40-50 цифр.

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Между текстами имеется более одной кавычки, что создает несколько разрывов строки. Вам нужно либо удалить дополнительные кавычки перед заменой, либо пустые строки после замены:

.map(x=>x.replaceAll("\"","\n").replaceAll("(?m)^[ \t]*\r?\n", ""))

Ссылка: Удалить все пустые строки

0 голосов
/ 05 мая 2020

Возможно, вам не хватает неявных кодировщиков, и вы попробуете код, как показано ниже

spark.read.text("src/main/resources/doubleQuoteFile.txt").map(row => {
      row.getString(0).replace("\"","\n") // looking to replace " " with next line
      row.getString(0).replace("\" \"","\n") // looking to replace " " with next line
    })(org.apache.spark.sql.Encoders.STRING)
...