2016-10-22 2 views
0

다른 색인을 쿼리하여 많은 텍스트 파일에서 데이터를 처리하려면 Spark을 사용해야합니다. 작은 경우 (RDD를 배열로 변환/아래 참조)에이 작업을 수행 할 수 있지만 더 많은 양의 데이터로 작업 할 수 있도록 설정하는 데 어려움이 있습니다.RDD에서 sc.textFile의 내포 된 사용

val rootPath = "..." 
val ndxRDD = sc.textFile(rootPath + "index/2016-09-01*") 

def ndxToDoc(articleName: String): String = { sc.textFile(rootPath + articleName).first(); } 

// works 
val artcilesArr = ndxRDD.collect().map(ndxToDoc); 
val articlesRDD = sc.parallelize(articlesArr) 

// does not work 
// val articlesRDD = ndxRDD.map(ndxToDoc) 

articlesRDD.count() 

나는 문제가 나는 RDD 내부의 파일을 읽기 위해 노력하고 있다는 것입니다 믿습니다

나는이 있습니다. 중간없이 위의 작업을 수행하려면 어떻게합니까? collect() - map -> textFile() - parallelize()이 설정되어 있습니까?

미리 감사드립니다.

+0

유스 케이스를 이해하고 있는지 확인하기 위해로드하고 싶은 수십억 개의 다른 파일 이름이있는 텍스트 파일이 있습니까? 또한 어떤 버전의 스파크를 사용하고 있습니까? –

+0

수십억 개의 다른 파일 이름을 가진 수십억 개의 텍스트 파일 (본질적으로 인덱스)이 있습니다. 나는 Spark 1.6을 사용하고 있지만 필요하다면 Spark 2.0으로 쉽게 업그레이드 할 수있다. – Vineet

답변

0

이 방법이 이러한 종류의 작업에 최적이라고 생각합니다. 원하는 사용 사례!

목록으로 수집해야합니다. 그렇지 않으면 현재 구현 된 Spark에서는 불가능한 RDD 내에 RDD를 만들어야합니다.

  1. Spark-Google-Group Discussion

  2. SPARK-NestedRDD

는 따라서이 최적의 방법입니다, 내가 제안 할 수 있지만 : 우리가 여기 봐 RDD 내에서 RDD를 만들 수없는 이유 자세한 내용

한 가지는 OFFHeap 메모리를 사용하여 큰 개체를 메모리에 저장할 수 있다는 것입니다.