2016-07-23 4 views
0

저는 아주 새로워졌습니다. [오류] [클라이언트가 10.2.23.89 (36)도 파일 이름 : 나는 날짜와spark를 사용하여 특정 메시지를 가져와야합니다.

십일 (11) 9시 44분 53초는 www가 아파치 [1933] 다음과 같은 오류 로그에서 오류 메시지를 끌어하려고 긴

십일 11 9시 49분 38초 WWW 아파치 [2728] : [오차 (36)가 너무 긴 파일 이름 [10.2.23.128 클라이언트] 십일 11 10시 14분 23초 WWW 아파치 [4530]

: [오류] [클라이언트] 10.2.23.243] (36) 파일 이름이 너무 깁니다.

11 월 11 일 10:15:24 www httpd [4630] : [오류] [클라이언트 10.2.23.42] (36) 파일 이름이 너무 깁니다.

,

11월 11일 12시 5분 7초 www가 아파치 [12062] : [오류] (36)

내가 스칼라 쉘에서 사용했던이 내 스크립트에 너무 긴 이름 파일 [10.2.23.148 클라이언트]

val inputfile = sc.textFile("hdfs://localhost:8020/kirthi/errorlog.txt") 

val elog = inputfile.map(line => (line.substring(0, 6),line.substring(65, 83))) 

elog.collect() 

출력이 나오지만 예상대로 아닙니다. 메시지는 모든 튜플에서 완전히 꺼내지지 않습니다. 로그의 각 행의 길이가 다양하기 때문에 내가 문자열의 길이를 늘리면

Array[(String, String)] = Array((Nov 11,File name too long), (Nov 11,File name too long), (Nov 11,File name too long), (Nov 11,File name too long), (Nov 11,File name too long)) 

아래에 게시 된

Array[(String, String)] = Array((Nov 11,File name too long), (Nov 11,)File name too lon), (Nov 11,)File name too lon), (Nov 11,File name too long), (Nov 11,6)File name too lo)) 

는하지만 출력을 원하는, 내가 경계 기대 오류 중 배열을 타격하고있다.

+1

스파크 질문보다 정규식 질문이 – marios

답변

1

물론 텍스트를 구문 분석하는 한 가지 방법은 정규식을 사용하는 것입니다. 이 구조를 일치하고 날짜 부분과 텍스트에서 캡처합니다

val regex = "(\\w+ \\d+) [0-9:]+ www httpd\\[\\d+\\]: \\[\\w+\\] \\[.+\\] \\(\\d+\\)(.+)$".r 

: 당신은 같은 것을 사용할 수 있습니다

<date: MMM dd HH:mm:ss> www httpd[<number>]: [<level>] [client <IP>] (<number>)<text> 

이 경우,이 로그 레코드의 구조를 가정하는 것은 같은 일이 항상 예를 들어, 패턴 매칭을 사용하여 종료 :

val elog = inputfile.map { case regex(date, text) => (date, text) } 

PS 이것은 실제로 Spark 질문이 아닙니다 (클러스터에서 드라이버 응용 프로그램으로 모든 데이터를 수집하는 것이 좋다고 가정 할 때 Spark 부분을 올바르게 가져 왔습니다).

+0

감사합니다 Tzach, 잘 작동합니다. 하지만이 ip [client 10.2.23.243]을 가져올 필요가 있다면 위 설명과 같은 정규 표현식을 사용할 수 있고 나에게 같은 것을 매핑하는 방법을 알려줄 수 있습니까? (date, text) 대신에 무엇을 사용해야합니까? . 감사합니다. – vasan

+0

죄송합니다. 실제로 그런 식으로 작동하지 않습니다 (주석에 새로운 질문을 추가해서는 안됩니다 ...). 스칼라에서 정규식을 사용하는 것에 대해 약간 읽으십시오. http :// /www.scala-lang.org/api/2.11.5/index.html#scala.util.matching.Regex –

관련 문제