2017-05-02 3 views
1

Apache Spark를 사용하여 java에서 다음 코드를 구현했습니다. AWS EMR에서이 프로그램을 실행하고 있습니다. 방금 ​​파일의 단어 수에 대한 예제에서 간단한 프로그램을 구현했습니다. HDFS에서 파일을 읽는 중입니다.스파크 saveAsTextFile 디렉토리 만들기

public class FileOperations { 

    public static void main(String[] args) { 

     SparkConf conf = new SparkConf().setAppName("HDFS"); 
     JavaSparkContext sparkContext = new JavaSparkContext(conf); 
     JavaRDD<String> textFile = sparkContext.textFile("hdfs:/user/hadoop/test.txt"); 
     System.out.println("Program is stared"); 
     JavaPairRDD<String, Integer> counts = textFile 
       .flatMap(s -> Arrays.asList(s.split(" ")).iterator()) 
       .mapToPair(word -> new Tuple2<>(word, 1)) 
       .reduceByKey((a, b) -> a + b); 



     counts.foreach(f -> System.out.println(f.toString())); 

     counts.saveAsTextFile("hdfs:/user/hadoop/output.txt"); 
     System.out.println("Program finished"); 
    } 

} 

위의 프로그램의 문제는 counts.saveAsTextFile("hdfs:/user/hadoop/output.txt"); 대신 디렉토리 output.txt가 만든 텍스트 파일을 생성하지 않는 것입니다.

위의 코드에서 잘못된 점은 무엇입니까? Spark와 EMR을 처음으로 사용합니다.

enter image description here

+2

이것이 어떻게 작동하는지입니다. 파일 이름은 지정하지 말고 경로 만 지정하십시오. Spark은 각 파티션마다 하나씩 디렉토리에 파일을 생성합니다. –

+0

감사. 완료. 내 파일을 찾았습니다.이 질문을 해결 된 것으로 표시 할 수 있도록 답변 섹션에 답변을 게시하십시오. –

답변

3

이것이 어떻게 작동하는지입니다. 파일 이름은 지정하지 않고 경로 만 지정하십시오. Spark은 해당 디렉토리 내에 파일을 생성합니다. 당신이 saveAsTextFile 방법 정의를 보면 당신은 경로를 기대하고 있음을 볼 수 있습니다

public void saveAsTextFile(String path)

를 경로 내에서 당신이 데이터의 각 파티션에 대한 part 파일을 만듭니다 지정합니다.

1
어느 쪽이든 당신 .collect() 모든 데이터

단일 파일에 방법을 자신의 저장하여 쓰기 또는 .repartition(1) 여전히 디렉토리가 발생합니다 데이터를하지만, 데이터가 하나 개의 부품 파일을 (part-00000)