2017-10-04 23 views
-2

그래서 그래프를 반복하고 데이터를 한 줄씩 텍스트 파일에 쓰는 스칼라 프로그램이 있습니다. 그것은 본질적으로 graphx와 함께 사용할 가장자리 목록 파일입니다.빠른 파일 쓰기가 스칼라입니까?

실제로이 텍스트 파일을 만드는 속도가 가장 느려지는 것은이 텍스트 파일에 기록하는 백만 곡을 말하는 것이 었습니다. 어떻게 든이 작업을 어떻게 든 병렬 처리하거나 메모리 또는 다른 어떤 방법 으로든 더 빠르게 저장하는 방법이 있습니까?

상세 정보 : 나는 그래프을 반복하는 하둡 클러스터를 사용하고 여기에 내 텍스트 파일 작성 메신저 내 코드는 HDFS에 쓰기를 지금하고 있습니다 :

val fileName = dbPropertiesFile + "-edgelist-" + System.currentTimeMillis() 
val path = new Path("/home/user/graph/" + fileName + ".txt") 
val conf = new Configuration() 
conf.set("fs.defaultFS", "hdfs://host001:8020") 

val fs = FileSystem.newInstance(conf) 
val os = fs.create(path) 
while (edges.hasNext) { 
val current = edges.next() 
os.write(current.inVertex().id().toString.getBytes()) 
os.write(" ".getBytes()) 
os.write(current.outVertex().id().toString.getBytes()) 
os.write("\n".toString.getBytes()) 
} 
fs.close() 
+0

Akka를 사용하여 스칼라에서 이러한 병렬 파일 처리에 대해 살펴보십시오. https://stackoverflow.com/questions/11576439/parallel-file-processing-in-scala –

+0

로컬 파일 시스템에 쓰기를 원하십니까? 아니면 HDFS 등의 클러스터에 있습니까? –

+2

답변이 너무 광범위하므로이 질문을 닫으려고합니다. – eliasah

답변

1

쓰기 파일을 HDFS는에 절대로 빨리. 귀하의 태그는 이미 어쨌든 불꽃을 사용하고 있음을 암시하는 것처럼 보이므로,이를 활용할 수도 있습니다.

sparkContext 
     .makeRDD(20, edges.toStream) 
     .map(e => e.inVertex.id -> e.outVertex.id) 
     .toDF 
     .write 
     .delimiter(" ") 
     .csv(path) 

이 20 개 파티션으로 입력을 분할 (위에서 makeRDD에 숫자 매개 변수를 사용하여 해당 수를 제어 할 수 있습니다), 그리고 결과 파일을 나타냅니다 HDFS에서 20 개 개의 덩어리에 병렬로 기록합니다.