2017-03-14 1 views
0

일부 텍스트 파일이 있으며이 파일을 사용하여 RDD를 만들고 싶습니다. 텍스트 파일을 'FOLDER_1'과 'Folder_2'에 저장되어있는 파일을 로컬 저장소에 저장하는 경우 이러한 폴더는 폴더 'text_data'HDFS 디렉토리에서 파일 읽기 및 Python을 사용하여 Spark에서 RDD 만들기

에 저장되어, 다음 코드는 작동 :

#Reading the corpus as an RDD 

data_folder = '/home/user/text_data' 

def read_data(data_folder): 
    data = sc.parallelize([]) 
    for folder in os.listdir(data_folder): 
     for txt_file in os.listdir(data_folder + '/' + folder ): 
      temp = open(data_folder + '/' + folder + '/' + txt_file) 
      temp_da = temp.read() 
      temp_da = unicode(temp_da, errors = 'ignore') 
      temp.close() 
      a = [ (folder, temp_da) ] 
      data = data.union(sc.parallelize(a)) 
    return data 

read_data 함수는 텍스트 파일로 구성된 RDD를 반환합니다.

'text_data'폴더를 HDFS 디렉토리로 이동하면 어떻게 할 수 있습니까?

코드는 SPARK를 실행하는 Hadoop-Yarn Cluster에 배포해야합니다.

답변

0

은 1.6.2 버전이는 불꽃에서 테스트되었습니다

hdfs_folder = 'hdfs://<namenode>/home/user/text_data/*' 

def read_data(hdfs_folder): 
    data = sc.parallelize([]) 
    data = sc.textFile(hdfs_folder) 
    return data 

아래 답장을

>>> hdfs_folder = 'hdfs://coord-1/tmp/sparktest/0.txt' 
>>> def read_data(hdfs_folder): 
...  data = sc.parallelize([]) 
...  data = sc.textFile(hdfs_folder) 
...  return data 
... 
>>> read_data(hdfs_folder).count() 
17/03/15 00:30:57 INFO SparkContext: Created broadcast 14 from textFile at NativeMethodAccessorImpl.java:-2 
17/03/15 00:30:57 INFO SparkContext: Starting job: count at <stdin>:1 
17/03/15 00:30:57 INFO SparkContext: Created broadcast 15 from broadcast at DAGScheduler.scala:1012 
189 
>>> 
+0

감사를하여 하둡 환경의 네임 노드를 교체합니다. @sasubillis 거의 문제를 해결합니다. 유일한 단점은 각각의 텍스트 파일에 개별적으로 접근하여 튜플을 만들 필요가 있다는 것입니다. a = [(folder, temp_da)] 튜플을 RDD 에 추가하십시오. data = data.union (sc.parallelize (a))' 이 기능을 코드에 통합하는 방법은 무엇입니까? – nidhink1995

관련 문제