복붙노트

[SCALA] 를 CSV로 DataFrame을 저장할 때 파일 이름을 지정 [중복]

SCALA

를 CSV로 DataFrame을 저장할 때 파일 이름을 지정 [중복]

내가 디스크에 CSV 파일을 저장할 스파크 DF을 말해봐. 스파크 2.0.0+에서, 하나는 DataFrameWriter로 DataFrame (데이터 세트 [행])로 변환하고 파일을 작성하는 .CSV 방법을 사용할 수있다.

함수는 다음과 같이 정의된다

def csv(path: String): Unit
    path : the location/folder name and not the file name.

스파크 상점 이름으로 CSV 파일을 작성하여 지정된 위치의 csv 파일 - 부분 - *. CSV.

. * CSV - 지정된 파일 이름 대신의 한 부분으로 CSV를 저장하는 방법이 있나요? 또는 수에 대신의 일부-R 접두사를 지정?

코드 :

df.coalesce(1).write.csv("sample_path")

전류 출력 :

sample_path
|
+-- part-r-00000.csv

원하는 출력 :

sample_path
|
+-- my_file.csv

주 : 병합 기능은 출력하는 단일 파일을 사용하고, 실행자는 메모리 오류없이 DF를 수집하기에 충분한 메모리를 갖는다.

해결법

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

    1.그것은 스파크의 저장에서 직접 할 수는 없습니다

    그것은 스파크의 저장에서 직접 할 수는 없습니다

    당신이 파트 - 파일이 그 이유는 - 불꽃 분할 할 데이터가 필요 하둡 파일 형식을 사용합니다. 당신은 쉽게 바로이 질문에서와 같이 처리 한 후 파일 이름을 변경할 수 있습니다

    스칼라에서는 같은 모양 :

    import org.apache.hadoop.fs._;
    val fs = FileSystem.get(sc.hadoopConfiguration);
    val file = fs.globStatus(new Path("path/file.csv/part*"))(0).getPath().getName();
    
    fs.rename(new Path("csvDirectory/" + file), new Path("mydata.csv"));
    fs.delete(new Path("mydata.csv-temp"), true);
    

    아니면 그냥 :

    import org.apache.hadoop.fs._;
    val fs = FileSystem.get(sc.hadoopConfiguration());
    fs.rename(new Path("csvDirectory/data.csv/part-0000"), new Path("csvDirectory/newData.csv"));
    

    편집 : 댓글에서 언급 한 바와 같이, 당신은 또한 당신의 자신의 OutputFormat을 쓸 수, 파일 이름을 설정하려면이 방법에 대한 자세한 내용은 문서를 참조하십시오

  2. from https://stackoverflow.com/questions/41990086/specifying-the-filename-when-saving-a-dataframe-as-a-csv by cc-by-sa and MIT license