hdfs에있는 파일에 대해 동일한 코드를 작성하려고 시도했지만 작동하지만 로컬 파일 시스템에 동일한 코드를 사용하면 오류가 발생합니다. 원인 : java.io.FileNotFoundException : 파일 파일 : /root/cd/parsed_cd_5.xml이 존재하지 않습니다.
XML 파일을 구문 분석하기 위해 ElementTree 를 사용 하고 있습니다. 나는 파이썬으로 코드를 실행했고 그것은 매력처럼 작동했다. 그러나 스파크를 사용하여 동일하게 실행하려고 할 때 오류가 발생합니다.
오류:
glob.glob (os.path.join (path, '* .xml'))의 파일 이름에 대한 파일 "/root/sparkCD.py", 82 행 : 파일 "/usr/lib64/python2.6/posixpath. py ", 67 행, join elif path == ''또는 path.endswith ( '/') :
오류에서 " for filename in glob.glob (os.path.join (path, '* .xml')) "에 문제가 있음이 분명합니다 . 그러나 나는 pyspark 에서 동일한 것을 달성하는 방법을 모릅니다 . 내 코드를 공유 할 수 없기 때문에 오류가 발생하지 않는 파이썬 코드와 비교하여 오류가 발생하는 부분 만 공유 할 것입니다.
파이썬 :
path = '/root/cd'
for filename in glob.glob(os.path.join(path, '*.xml')):
tree = ET.parse(filename)
doc = tree.getroot()
Pyspark :
path = sc.textFile("file:///root/cd/")
for filename in glob.glob(os.path.join(path, '*.xml')):
tree = ET.parse(filename)
doc = tree.getroot()
이 문제를 어떻게 해결할 수 있습니까? 내가 원하는 것은 현재 pyspark를 사용하여 로컬 시스템 cd 디렉토리에 있는 현재 처리중인 파일 이름입니다 . 이것이 어리석은 소리라면 용서하십시오.
최신 정보:
아래에 제시된 제안을 시도했지만 파일 이름을 얻지 못했습니다. 아래는 내 코드입니다.
filenme = sc.wholeTextFiles("file:///root/cd/")
nameoffile = filenme.map(lambda (name, text): name.split("/").takeRight(1)(0)).take(0)
print (nameoffile)
내가 gettng 결과는
PythonRDD.scala의 RDD에서 PythonRDD [22] : 43
업데이트 : wholeTextFiles 대신 아래 코드를 작성 했지만 동일한 오류가 발생합니다. 또한 내 질문에 따라 내 파일의 이름을 얻고 싶으므로 textFile이 도움이되지 않는다고 말하고 싶습니다. 제안한 코드를 실행 해 보았지만 동일한 결과를 얻었습니다.
path = sc.textFile("file:///root/cd/")
print (path)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다