입력으로 매우 긴 단일 행이있는 파일을 처리하면 레코드 수가 다른 이유는 무엇입니까?

빅토르 바슈 로프

Spark 1.2.1 (in local모드)을 사용하여 파일에서 로그 정보를 추출하고 처리합니다.

파일 크기는 100Mb 이상일 수 있습니다. 파일에는 매우 긴 한 줄이 포함되어 있으므로 정규식을 사용하여이 파일을 로그 데이터 행으로 분할합니다.

MyApp.java

JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> txtFileRdd = sc.textFile(filename);
JavaRDD<MyLog> logRDD = txtFileRdd.flatMap(LogParser::parseFromLogLine).cache();

LogParser.java

public static Iterable<MyLog> parseFromLogLine(String logline) {
        List<MyLog> logs = new LinkedList<MyLog>();
        Matcher m = PATTERN.matcher(logline);
        while (m.find()) {          
            logs.add(new MyLog(m.group(0)));            
        }   
        System.out.println("Logs detected " + logs.size());
        return logs;
}

처리 된 파일의 실제 크기는 약 100MB이며 실제로 323863로그 항목을 포함 합니다.

Spark를 사용하여 파일에서 로그 항목을 추출하면 올바르지 않은 455651[ logRDD.count()] 로그 항목이 표시됩니다.

파일 파티션으로 인해 발생한다고 생각하며 출력을 확인하면 다음과 같습니다.

Logs detected 18694  
Logs detected 113104  
Logs detected 323863

그리고 총합은 455651!

따라서 내 파티션이 서로 병합되어 중복 항목을 유지하는 것을 확인하고 이러한 동작을 방지하고 싶습니다.

해결 방법은 repartition(1)다음과 같습니다.

txtFileRdd.repartition(1).flatMap(LogParser::parseFromLogLine).cache();

그것은 나에게 원하는 결과 323863를 제공하지만 성능에 좋은지 의심합니다.

처리 성능을 향상시키는 방법은 무엇입니까?

다니엘 다라 보스

파티셔닝은 기본적으로 라인 기반입니다. 이것은 하나의 매우 긴 줄이있을 때 흥미로운 방식으로 실패하는 것 같습니다. 이에 대한 버그를 제출하는 것을 고려할 수 있습니다 (이미있을 수 있음).

분할은 Hadoop 파일 API, 특히 TextInputFormat클래스에 의해 수행됩니다 . 한 가지 옵션은 자체 InputFormat(전체 파서를 포함 할 수 있음 )를 지정 하고 sc.hadoopFile.

또 다른 옵션은 다음을 통해 다른 구분 기호를 설정하는 것입니다 textinputformat.record.delimiter.

// Use space instead of newline as the delimiter.
sc.hadoopConfiguration.set("textinputformat.record.delimiter", " ")

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내 코드가 C ++에서 단일 인쇄 cout 문을 주석 처리하여 다른 출력을 제공하는 이유는 무엇입니까?

분류에서Dev

pivot_wider가 단일 값을 중복으로 읽거나 행을 병합하지 않고 넓고 긴 티블을 만드는 이유는 무엇입니까?

분류에서Dev

ColumnTransformer가 동일한 코드를 사용하지만 다른 .csv 파일을 사용하여 다른 출력을 생성하는 이유는 무엇입니까?

분류에서Dev

서로 다른 디버거가 동일한 함수에 대해 서로 다른 어셈블리 코드를 출력하는 이유는 무엇입니까?

분류에서Dev

레이크 파일 코드가 매번 실행되는 이유는 무엇입니까?

분류에서Dev

일부 utorrent 파일의 다운로드 속도가 매우 느린 이유는 무엇입니까?

분류에서Dev

하나의 화면 코드로도 EXPO APK 파일이 매우 큰 이유는 무엇입니까?

분류에서Dev

"폴리머 빌드"에서 "단일 글로브가있는 파일을 찾을 수 없음"오류가 발생하는 이유는 무엇입니까?

분류에서Dev

awk에서 두 파일의 길이가 다른 두 입력 파일에서 일치하는 레코드를 얻는 방법은 무엇입니까?

분류에서Dev

터미널 에뮬레이터와 그 안에서 실행되는 셸이 다른 TERM 유형을 사용하는 경우 어떤 "나쁜"일이 발생할 수 있습니까 (그리고 그 이유는 무엇입니까)?

분류에서Dev

동일한 코드를 실행하지만 이름이 다른 경우 출력이 다른 이유는 무엇입니까?

분류에서Dev

배치 파일을 실행하면 다른 결과가 나타나는 이유는 무엇입니까?

분류에서Dev

2 개의 레코드가 동일한 컬럼의 값을 갖는 경우 다른 컬럼으로 정렬 한 후 ID로 레코드를 오름차순으로 정렬하는 방법은 무엇입니까? -레일

분류에서Dev

수동 마운트가 다른 파일 소유권을 설정하는 이유는 무엇입니까?

분류에서Dev

내 매우 기본적인 CSS 코드가 jsFiddle과 jsBin에서 다른 출력을 생성하는 이유는 무엇입니까?

분류에서Dev

PE 파일에 다른 코드 / 데이터 / bss 섹션을 생성하려는 이유는 무엇입니까?

분류에서Dev

uniq가 단일 문자로 된 유니 코드와 줄을 무시하는 이유는 무엇입니까?

분류에서Dev

하나의 Java 스레드가 다른 스레드에서 수행되는 OpenGL 렌더링을 차단하는 이유는 무엇입니까?

분류에서Dev

동일한 ARM 템플릿을 실행할 때 Azure App Service Environment가 긴 배포를 다시 수행하는 이유는 무엇입니까?

분류에서Dev

다음 코드가 성공적으로 컴파일되고 실행되는 이유는 무엇입니까?

분류에서Dev

레코드의 첫 단어 만 일치하는 이유는 무엇입니까?

분류에서Dev

이 코드가 단일 printf에서 다르게 작동하는 이유는 무엇입니까? ucontext.h

분류에서Dev

컴파일러마다 크기가 다른 파일을 생성하는 이유는 무엇입니까?

분류에서Dev

이 코드가 때때로 다른 출력을 생성하는 이유는 무엇입니까?

분류에서Dev

laravel에서 PDF 파일을 다운로드하려고 할 때 이상한 문자가있는 파일을 여는 이유는 무엇입니까?

분류에서Dev

nginx가있는로드 밸런서에서 다른 서버에서 파일을 찾지 못하는 이유는 무엇입니까?

분류에서Dev

가비지 수집기가 모든 관리 스레드를 일시 중단하는 경우이 코드로 인해 System.OutOfMemoryException이 발생하는 이유는 무엇입니까?

분류에서Dev

컴파일러 (예 : gcc)가 파생 클래스의 메모리 레이아웃을 이런 방식으로 처리하는 이유는 무엇입니까?

분류에서Dev

str (df [col])을 사용하면 코드가 단일 레코드에만 관련되는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    내 코드가 C ++에서 단일 인쇄 cout 문을 주석 처리하여 다른 출력을 제공하는 이유는 무엇입니까?

  2. 2

    pivot_wider가 단일 값을 중복으로 읽거나 행을 병합하지 않고 넓고 긴 티블을 만드는 이유는 무엇입니까?

  3. 3

    ColumnTransformer가 동일한 코드를 사용하지만 다른 .csv 파일을 사용하여 다른 출력을 생성하는 이유는 무엇입니까?

  4. 4

    서로 다른 디버거가 동일한 함수에 대해 서로 다른 어셈블리 코드를 출력하는 이유는 무엇입니까?

  5. 5

    레이크 파일 코드가 매번 실행되는 이유는 무엇입니까?

  6. 6

    일부 utorrent 파일의 다운로드 속도가 매우 느린 이유는 무엇입니까?

  7. 7

    하나의 화면 코드로도 EXPO APK 파일이 매우 큰 이유는 무엇입니까?

  8. 8

    "폴리머 빌드"에서 "단일 글로브가있는 파일을 찾을 수 없음"오류가 발생하는 이유는 무엇입니까?

  9. 9

    awk에서 두 파일의 길이가 다른 두 입력 파일에서 일치하는 레코드를 얻는 방법은 무엇입니까?

  10. 10

    터미널 에뮬레이터와 그 안에서 실행되는 셸이 다른 TERM 유형을 사용하는 경우 어떤 "나쁜"일이 발생할 수 있습니까 (그리고 그 이유는 무엇입니까)?

  11. 11

    동일한 코드를 실행하지만 이름이 다른 경우 출력이 다른 이유는 무엇입니까?

  12. 12

    배치 파일을 실행하면 다른 결과가 나타나는 이유는 무엇입니까?

  13. 13

    2 개의 레코드가 동일한 컬럼의 값을 갖는 경우 다른 컬럼으로 정렬 한 후 ID로 레코드를 오름차순으로 정렬하는 방법은 무엇입니까? -레일

  14. 14

    수동 마운트가 다른 파일 소유권을 설정하는 이유는 무엇입니까?

  15. 15

    내 매우 기본적인 CSS 코드가 jsFiddle과 jsBin에서 다른 출력을 생성하는 이유는 무엇입니까?

  16. 16

    PE 파일에 다른 코드 / 데이터 / bss 섹션을 생성하려는 이유는 무엇입니까?

  17. 17

    uniq가 단일 문자로 된 유니 코드와 줄을 무시하는 이유는 무엇입니까?

  18. 18

    하나의 Java 스레드가 다른 스레드에서 수행되는 OpenGL 렌더링을 차단하는 이유는 무엇입니까?

  19. 19

    동일한 ARM 템플릿을 실행할 때 Azure App Service Environment가 긴 배포를 다시 수행하는 이유는 무엇입니까?

  20. 20

    다음 코드가 성공적으로 컴파일되고 실행되는 이유는 무엇입니까?

  21. 21

    레코드의 첫 단어 만 일치하는 이유는 무엇입니까?

  22. 22

    이 코드가 단일 printf에서 다르게 작동하는 이유는 무엇입니까? ucontext.h

  23. 23

    컴파일러마다 크기가 다른 파일을 생성하는 이유는 무엇입니까?

  24. 24

    이 코드가 때때로 다른 출력을 생성하는 이유는 무엇입니까?

  25. 25

    laravel에서 PDF 파일을 다운로드하려고 할 때 이상한 문자가있는 파일을 여는 이유는 무엇입니까?

  26. 26

    nginx가있는로드 밸런서에서 다른 서버에서 파일을 찾지 못하는 이유는 무엇입니까?

  27. 27

    가비지 수집기가 모든 관리 스레드를 일시 중단하는 경우이 코드로 인해 System.OutOfMemoryException이 발생하는 이유는 무엇입니까?

  28. 28

    컴파일러 (예 : gcc)가 파생 클래스의 메모리 레이아웃을 이런 방식으로 처리하는 이유는 무엇입니까?

  29. 29

    str (df [col])을 사용하면 코드가 단일 레코드에만 관련되는 이유는 무엇입니까?

뜨겁다태그

보관