[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.그것은 스파크의 저장에서 직접 할 수는 없습니다
그것은 스파크의 저장에서 직접 할 수는 없습니다
당신이 파트 - 파일이 그 이유는 - 불꽃 분할 할 데이터가 필요 하둡 파일 형식을 사용합니다. 당신은 쉽게 바로이 질문에서와 같이 처리 한 후 파일 이름을 변경할 수 있습니다
스칼라에서는 같은 모양 :
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을 쓸 수, 파일 이름을 설정하려면이 방법에 대한 자세한 내용은 문서를 참조하십시오
from https://stackoverflow.com/questions/41990086/specifying-the-filename-when-saving-a-dataframe-as-a-csv by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스파크 DataFrame에 하나의 열에서 여러 열을 유도 (0) | 2019.11.04 |
---|---|
[SCALA] 스칼라에서 자바 컬렉션 반복 (0) | 2019.11.04 |
[SCALA] 전용 [이] 전용 VS (0) | 2019.11.04 |
[SCALA] 스칼라에서 무두질의 두 가지 방법; 각 유스 케이스는 무엇인가? (0) | 2019.11.04 |
[SCALA] 나는 런타임에 변수의 유형을 얻으려면 (0) | 2019.11.04 |