2017-11-09 3 views
0

에서 특정 문자로 시작하는 줄 나는이처럼 보이는 텍스트 파일을 가져 오기. 이것은 내가 시도한 것입니다 :스파크

val lines = sc.textFile("textfile.txt") 
val reg = "^ABC".r 
val abc_lines = lines.filter(x => reg.pattern.matcher(x).matches) 
abc_lines.count() 

카운트가 0을 반환하므로 어디서 잘못 되었습니까?

답변

3

정규식이 필요하지 않습니다. 단지 startsWith 메소드 만 사용할 수 있습니다.

val abc_lines = lines.filter(x => x.startsWith("ABC")) 
+0

확인 감사로 일을! 하지만 내 코드에 어떤 문제가 있는지 말해 줄 수 있습니까? – Stanko

1

메서드 일치가 예상 한대로 수행되지 않습니다 (제발, 설명서 참조). 당신이 findFirstIn 방법을 사용할 수 있습니다 Matching against a regular expression in Scala

+1

하지만,이 간단한 경우에는 정규식이 필요하지 않습니다. –

+0

감사합니다.이 또한 도움이됩니다. – Stanko

0

- 당신은 여기에 더 많은 정보를 찾을 수 있습니다

val list2 = List("ABC", "DEF gibberish", "ABC text", "DEF random") 
val lines2: Seq[String] = list.filter(reg.findFirstIn(_).isDefined) 
println(lines2.size) 

:

당신은 당신이 코드를 사용할 수 있습니다, 대신

val list = List("ABC", "DEF gibberish", "ABC text", "DEF random") 
val reg = "^ABC".r 
val lines: Seq[String] = list.filter(x => reg.pattern.matcher(x).matches) 
println(lines.size) 

을 이해하기 위해이 조각을 시도 할 수 있습니다 정규식 다음과 같이

val abc_lines = lines.filter(x => "^ABC".r.findFirstIn(x) == Some("ABC")) 

올바른 결과를 제공해야합니다.

는 스파크 당신에게 Task not serializable 오류 메시지를 줄 것이다 다음

val reg = "^ABC".r 
val abc_lines = lines.filter(x => reg.findFirstIn(x) == Some("ABC"))