2014-07-14 3 views
12

저는 Apache Spark (스칼라에서는 언어가 부적절합니다)를 사용하기 시작했습니다. 독립 실행 형 모드을 사용 중이며 로컬 파일 시스템 (너무 HDFS처럼 배포되지 않음)에서 텍스트 파일을 처리하려고합니다.Spark : 로컬 파일 시스템에 SparkContext.textFile을 사용하는 방법

SparkContext에서 textFile 방법의 문서에 따르면,

는 HDFS (모든 노드에서 사용 가능) 로컬 파일 시스템, 또는 하둡 지원 파일 시스템 URI에서 텍스트 파일을 읽어합니다 , 문자열의 RDD로 반환하십시오.

전체 텍스트 파일을 모든 노드에 복사 할 수 있는지 또는 입력 데이터가 이미 분할되어 있어야하는지 (예 : 4 개의 노드와 1000 개의 줄이있는 csv 파일을 사용하는 경우 각 노드에 250 개의 줄이 있어야합니다.

각 노드에 전체 파일이 있어야한다고 생각하지만 확실하지 않습니다.

답변

7

각 노드에는 전체 파일이 있어야합니다. 이 경우 로컬 파일 시스템은이 파일과 관련하여 논리적으로 HDFS와 구별 할 수 없습니다.

+0

아무런 언급이 없지만 회신 및 긴급 성으로 인해 정확하다고 가정합니다. 감사! – herman

+0

고마워요! 그것은 내가 생각하는 것입니다,하지만 저는이 경우 확실히 확신합니다. 어쨌든 - 문제가 있으면 알려주세요. –

+2

[외부 데이터 세트의 프로그래밍 가이드] (http://spark.apache.org/docs/1.2.1/programming-guide.html#external-datasets) : _ 로컬 파일 시스템의 경로를 사용하는 경우 파일 작업자 노드의 동일한 경로에서 액세스 할 수 있어야합니다. 파일을 모든 작업자에게 복사하거나 네트워크 마운트 공유 파일 시스템을 사용하십시오. _ – Tobber

1

Spark의 FAQ 페이지 - Hadoop/HDFS를 사용하지 않는 경우 "클러스터에서 실행하는 경우 몇 가지 형태의 공유 파일 시스템이 필요합니다 (예 : 각 노드의 동일한 경로에 NFS가 마운트 됨)).이 유형의 파일 시스템을 사용하는 경우 독립형 모드로 Spark를 배포 할 수 있습니다. " 사용하는 로컬 파일 경로로

https://spark.apache.org/faq.html

4

앞에 추가 file://

+1

제 경우에는 작동하지 않았습니다. 그러나 그것은 단지 하나의 슬래시로 작동합니다 : 'sc.textFile ('file :/home/data/lines'). count()' – marvelousNinja

2

적절한 방법은 세 가지 슬래시입니다. 구문 (예 : http : //)과 Linux 파일 시스템의 마운트 지점 (sc.textFile (file : ///home/worker/data/my_file.txt)) 중 하나. 로컬 모드를 사용하는 경우 파일만으로 충분합니다. 독립 실행 형 클러스터의 경우 파일을 각 노드에 복사해야합니다. 파일의 내용이 정확히 동일해야합니다. 그렇지 않으면 spark가 재미있는 결과를 반환합니다.

1

불꽃-1.6.1

자바 1.7.0_99 클러스터 3

노드 (HDP).

Case 1:

Running in local mode local[n] 

file:///..file:/.. 및 로컬 시스템에서 파일을 읽어

Case 2:

`--master yarn-cluster` 

Input path does not exist: for file:/ and file://

그리고 file://

java.lang.IllegalArgumentException :Wrong FS: file://.. expected: file:///

1

추가에 대한 : "// 파일"대신에 "파일 ///"URI입니다. 이것은 나를 위해 문제를 해결했다.

관련 문제