2016-06-07 4 views
0

내가 항상 RDD는 튜플 포함 심지어 빈 파일을 가져 기능 saveAsTextFile()를 사용하려고하면 :아파치 스파크 : saveAsTextFile()와 필터 문제()

myRDD.saveAsTextFile("C:/Users/pc/Desktop/chna.txt"); 

어떤 이유가있을 수 있습니까?

데이터 파일이 텍스트 파일에 등록되어 있다고 가정 해 봅시다. 어떻게 쉘 또는 코드를 통해 검색 할 수 있습니까? (참고 : Java를 사용하고 있습니까?)

내 코드 (자바를 항상 사용)를 통해 텍스트 파일을 수정하는 솔루션이 있습니까? 다음 코드를 시도했지만 java.io.NotSerializableException이 있습니까? 다른 가능한 해결책이 있습니까? 나는이 코드 줄을 사용하면

BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("C:/Users/pc/Desktop/chn.txt", true)); 
pairsRDD.foreach(x -> bufferedWriter.write(x._1+" "+x._2)); 
bufferedWriter.newLine(); // ... 
bufferedWriter.close(); 

는 :

JavaPairRDD<Integer, String> filterRDD = pairsRDD.filter((x,y) -> (x._1.equals(y._1))&&(x._2.equals(y._2))))); 

내가 IOException 얻었다을 RDD가 비어 있기 때문에 발생합니다? 또는 필터에 사용 된 조건이 잘못 되었습니까?

이 문제를 어떻게 해결할 수 있습니까? 그 이유는 무엇입니까?

때 java.io.IOException : 하둡의 바이너리 실행 널 \ 빈 \의 winutils.exe 를 찾을 수 없습니다.

RDD를 만들 때 첫 번째 줄 (필드 이름)도 필요합니다. 어떻게 피할 수 있습니까? 왜냐하면 나는 값들을 포함하는 선들 만 가지고 가기를 원하기 때문입니다.

답변

0

saveAsTextFile()은 파일 경로가 아니라 매개 변수로 폴더 경로를 사용합니다. part-r-xxxxx (xxxxx는 00000)라는 이름의 해당 파티션에 실제로 하나의 파일을 씁니다.

데이터를 다시 읽으려면 sparkContext.textFile() 또는 .wholeTextFile() 방법을 사용하는 것처럼 간단합니다 (단일 파일이나 전체 폴더를 읽는 중 여부에 따라 다름).

스파크 쓰기의 이름 지정을 제어하지 않고 처음에는 비어 있지 않은 폴더에 쓰기를 금지하기 때문에 파일을 제자리에서 수정하는 간단한 해결책은 없습니다.

정말하고 싶다면 분산 작업의 문제가 아니기 때문에 spark를 사용하지 않는 것이 가장 좋습니다. 예를 들어 sed 또는 awk를 사용하여 장소 파일 편집을 수행합니다. 더 많은 공연자, ​​그리고 하나의 라이너.

+0

고맙습니다. 다른 질문은 어떻습니까? – hammadspark

+0

고맙습니다. 다른 질문은 어떻습니까? 1. 어떻게 필드의 이름 (id name job sex ....)을 포함하는 파일의 첫 번째 줄을 제거 할 수 있습니까? bcz 값 2를 포함하는 줄만 원합니다.이 코드 줄에서 IOException을 얻습니다. \t \t JavaSparkContext sc = 새 JavaSparkContext (conf); 이 예외의 세부 사항은 다음과 같습니다. Hadoop 바이너리에서 실행 파일 null \ bin \ winutils.exe를 찾을 수 없습니다. 그리고 winutils.exe를 다운로드하려고 할 때이 메시지가 나타 났을 때 : 프로그램을 시작할 수 없습니다. bcz MSVCR100.dll이 잘못되어 있습니다. 어떻게 해결할 수 있습니까? – hammadspark

+0

1. RDD에 .filter()를 사용하여 라인 만 유지하십시오. 너는 을 원한다. 2. 나는 모르지만, 나는 창문에 불꽃을 사용하려하지 않았다. 솔직히 오히려 우분투 VM을 설치하는 것보다 이것을 수정^^ – C4stor

관련 문제