2016-10-04 3 views
0

저는 스파크에서 새로 왔지만 하둡에서 약간의 경험을했습니다. Hadoop 스트리밍에서 사용하는 Python 코드를 JSON 형식의 일부 트윗을 필터링하는 데 적용하려고했습니다.스파크 (파이썬)에 없음 또는 빈 줄을 쓰지 마십시오.

일반적으로 my 함수는 조건이 true이면 트윗을 stdout으로 출력하고 그렇지 않으면 아무것도 인쇄하지 않는 조건을 갖습니다.

def filter(tweet): 
    if criteria(tweet) is True: 
     print json.dumps(tweet) 

이렇게하면 최종 출력 파일에는 내가 원하는 짹짹만 포함됩니다.

그러나 Spark를 사용하려고 할 때 return 문을 변경해야하므로 조건이 참일 경우 트윗을 반환하고 그렇지 않으면 None을 반환합니다.

def filter(tweet): 
     if criteria(tweet) is True: 
      return json.dumps(tweet) 

결과를 디스크에 저장하려고하면이 문제가 나타납니다. Pyspark의 saveAsTextFile 메서드를 사용하면 원하는 짹짹뿐만 아니라 조건이 거짓 일 때 None을 반환합니다.

원하는 짹짹만 저장할 수 있도록 파일에 None을 쓰지 않으려면 어떻게해야합니까?

미리 감사드립니다.

호르헤는

+0

수없는 이유는 방금, 그렇지 ""? 그래도 작동하지 않으면 반환 된 json 덤프에 대한 간단한 후 처리 작업을 수행 할 수 없습니까? –

+0

안녕하세요. 좋은 지적이지만 대신 빈 줄을 인쇄하지 않을 것인가? 당신의 응답을 주셔서 감사합니다. – Salias

답변

1

아주 우아한 해결책은 flatMap을 사용하는 것입니다

def filter(tweet): 
    return [json.dumps(tweet)] if criteria(tweet) is True else [] 

some_rdd.flatMap(filter) 
0

당신이지도에서 함수를 사용하는 경우, 그것은 당신이 가지고있는 요소의 수는 감소하지 않습니다. 요소를 필터링하려면 map 이후 요소가 None인지 테스트하려면 filter 메서드를 사용해야합니다. filtermap 체인 피한다

관련 문제