4
위 코드를 스파크 드라이버로 사용하고 프로그램을 실행하면 필요한 데이터를 마루 파일로 올바르게 저장합니다.Spark Java Map 함수가 두 번 실행됩니다.
String indexFile = "index.txt";
JavaRDD<String> indexData = sc.textFile(indexFile).cache();
JavaRDD<String> jsonStringRDD = indexData.map(new Function<String, String>() {
@Override
public String call(String patientId) throws Exception {
return "json array as string"
}
});
//1. Read json string array into a Dataframe (execution 1)
DataFrame dataSchemaDF = sqlContext.read().json(jsonStringRDD);
//2. Save dataframe as parquet file (execution 2)
dataSchemaDF.write().parquet("md.parquet");
하지만 RDD indexData
내 매퍼 기능을 관찰 두 번 실행지고 있습니다. 나는 마루 파일이 나를 인도 할 수
에 dataSchemaDF
을 쓸 때 나는 SQLContext
둘째를 사용하여 DataFrame
로 jsonStringRdd
을 읽을 때 첫째, 어떻게이 반복 실행을 피하기 위해? json 문자열을 Dataframe으로 변환하는 더 좋은 방법이 있습니까?
어디에 두 개의지도를보고있다? RDD는 느리게 평가됩니다. 'map' 연산은 하나의 변환이 아니라 동작이므로,'jsonStringRDD'의 할당은 즉시 실행되어서는 안됩니다. 데이터 프레임을 읽고 마루에 쓰는 실행 경로는 모두 RDD를 수집해야합니다. –
매퍼 (mapper) 함수에 로깅 문이 있는데, 로그에 두 번 표시됩니다. – blob