wholeTextFiles
을 사용하여 디렉토리의 각 파일을 읽습니다. 그 후을 사용하여 rdd의 각 요소에 대한 함수를 호출합니다. 전체 프로그램은 각 파일의 단지 50 줄만 사용합니다. 코드는 다음과 같습니다 :apache spark : 디렉토리에서 큰 파일 읽기
def processFiles(fileNameContentsPair):
fileName= fileNameContentsPair[0]
result = "\n\n"+fileName
resultEr = "\n\n"+fileName
input = StringIO.StringIO(fileNameContentsPair[1])
reader = csv.reader(input,strict=True)
try:
i=0
for row in reader:
if i==50:
break
// do some processing and get result string
i=i+1
except csv.Error as e:
resultEr = resultEr +"error occured\n\n"
return resultEr
return result
if __name__ == "__main__":
inputFile = sys.argv[1]
outputFile = sys.argv[2]
sc = SparkContext(appName = "SomeApp")
resultRDD = sc.wholeTextFiles(inputFile).map(processFiles)
resultRDD.saveAsTextFile(outputFile)
디렉토리의 각 파일의 크기는 내 경우에는 매우 클 수 때문에 wholeTextFiles
API의 이러한 이유로 사용의 경우 비효율적 일 것입니다. 이 작업을 수행하는 효율적인 방법이 있습니까? 디렉토리의 각 파일에 대해 하나씩 반복하는 것을 생각할 수 있지만 비효율적 인 것으로 보입니다. 나는 불꽃에 처음이다. 이 작업을 효율적으로 수행 할 수 있는지 알려 주시기 바랍니다.
각 파일의 크기는 얼마나 큽니까? 파일을 더 작은 파일로 분할 할 수 없습니까? –
@DatTran 각 파일의 크기는 몇 GBS에있을 수 있으며 디렉토리의 파일 수는 100 개가 넘을 수 있습니다. 파일 분할에 대해 생각할 수있는 한 가지 방법은 각 파일을 하나씩 나누고 각 파일에서 첫 번째 분할을 가져 와서 유지하는 것입니다 임시 디렉터리에. 그 후에 우리는'wholeTextFiles'을 그 임시 디렉토리에 적용 할 수 있습니다. 이 방법으로 파일을 분할하는 것이 좋습니다? 그렇지 않다면 파일 분할 방법을 알려주십시오. – mcurious