2017-12-20 16 views
1

람다 함수 내부의 정규 표현식을 기반으로 문자열을 분할하려하지만 문자열이 분할되지 않습니다. 나는 정규 표현식이 잘 동작하고 있다고 확신한다. 정규식 테스트 링크 https://regex101.com/r/ryRio6/1람다 안에서 정규 표현식을 사용하는 pyspark 분할 문자열

을 확인
from pyspark.sql.functions import col,split 
import re 

r = re.compile(r"(?=\s\w+=)") 
adsample = sc.textFile("hdfs://hostname/user/hdfs/sample/Log18Dec.txt") 
splitted_sample = adsample.flatMap(lambda (x): ((v) for v in r.split(x))) 

for m in splitted_sample.collect(): 
    print(m) 

내가 잘못된거야 어디하지 않도록 .. 파일에서

샘플 라인 :

|RECEIVE|Low| eventId=139569 msg=W4N Alert :: Critical : Interface Utilization for GigabitEthernet0/1 90.0 % in=2442 out=0 categorySignificance=/Normal categoryBehavior=/Communicate/Query categoryDeviceGroup=/Application 

정규식 키

전에 공간과 일치해야한다

출력

|RECEIVE|Low| 
eventId=139569 
msg=W4N Alert :: Critical : Interface Utilization for GigabitEthernet0/1 90.0 % 
in=2442 
out=0 
categorySignificance=/Normal 
categoryBehavior=/Communicate/Query 
categoryDeviceGroup=/Application 
+0

Log18Dec.txt에서 데이터를 공유하고 예상하는 결과를 얻을 수 있습니까? – rohitkulky

+0

또는 적어도 당신이 무엇을 기대하는지 (이 말은 "당신이 당신의 정규 표현식이 일치해야하는 것을 설명 할 수 있습니까?") 무엇을 얻을 수 있습니까? – Oli

+0

@Oli, rohikulky 님이 샘플 라인 및 원하는 출력으로 편집했습니다. –

답변

1
from pyspark.sql.functions import col,split 
import re 

#r = re.compile(r"(?=\s\w+=)") 
adsample = sc.textFile("hdfs://hostname/user/hdfs/sample/Log18Dec.txt") 
splitted_sample = adsample.flatMap(lambda (x): ((v) for v in re.split('\s+(?=\w+=)',x))) 

for m in splitted_sample.collect(): 
    print(m)