복붙노트

[HADOOP] Apache Spark의 파일에 쓰기

HADOOP

Apache Spark의 파일에 쓰기

내가 HDFS에서 파일에 쓰는 것을 요구하는 스칼라 코드를 작성 중이다. 로컬에서 Filewriter.write를 사용하면 작동합니다. HDFS에서도 동일한 기능이 작동하지 않습니다. 확인한 결과, Apache Spark에서 작성하는 다음과 같은 옵션이 있음을 발견했습니다. RDD.saveAsTextFile 및 DataFrame.write.format.

내 질문은 : 만약 int 또는 string을 Apache Spark의 파일에 쓰고 싶다면 어떻게해야할까요?

후속 조치 : 출력 파일에 헤더, DataFrame 내용을 쓰고 문자열을 추가해야합니다. sc.parallelize (Seq (<>))가 도움이됩니까?

해결법

  1. ==============================

    1.Seq를 사용하여 데이터 (int / string)로 RDD를 작성하십시오. 자세한 내용은 parallelized-collections를 참조하십시오.

    Seq를 사용하여 데이터 (int / string)로 RDD를 작성하십시오. 자세한 내용은 parallelized-collections를 참조하십시오.

    sc.parallelize(Seq(5))  //for writing int (5)
    sc.parallelize(Seq("Test String")) // for writing string
    
    val conf = new SparkConf().setAppName("Writing Int to File").setMaster("local")
    val sc = new SparkContext(conf) 
    val intRdd= sc.parallelize(Seq(5))   
    intRdd.saveAsTextFile("out\\int\\test")
    
    val conf = new SparkConf().setAppName("Writing string to File").setMaster("local")
    val sc = new SparkContext(conf)   
    val stringRdd = sc.parallelize(Seq("Test String"))
    stringRdd.saveAsTextFile("out\\string\\test")
    
  2. ==============================

    2.후속 조치 예 : (아래 테스트)

    후속 조치 예 : (아래 테스트)

    val conf = new SparkConf().setAppName("Total Countries having Icon").setMaster("local")
    val sc = new SparkContext(conf)
    
    val headerRDD= sc.parallelize(Seq("HEADER"))
    
    //Replace BODY part with your DF
    val bodyRDD= sc.parallelize(Seq("BODY"))
    
    val footerRDD = sc.parallelize(Seq("FOOTER"))
    
    //combine all rdds to final    
    val finalRDD = headerRDD ++ bodyRDD ++ footerRDD 
    
    //finalRDD.foreach(line => println(line))
    
    //output to one file
    finalRDD.coalesce(1, true).saveAsTextFile("test") 
    

    산출:

    HEADER
    BODY
    FOOTER
    

    여기에 더 많은 예제가 있습니다. . .

  3. from https://stackoverflow.com/questions/39173039/writing-to-a-file-in-apache-spark by cc-by-sa and MIT license