2017-02-27 7 views
1

Pythonを使用してHDFS内のディレクトリ内のファイルを読み込もうとしています。私は以下のコードを使用していますが、エラーが発生しています。Pythonを使用してHDFSディレクトリ内のファイルを読み取る方法

コード

cat = Popen(["hadoop", "fs", "-cat", "/user/cloudera/CCMD"], stdout=PIPE) 

がエラー

cat: `/user/cloudera/CCMD': Is a directory 
Traceback (most recent call last): 
    File "hrkpat.py", line 6, in <module> 
    tree = ET.parse(cat.stdout) 
    File "/usr/lib64/python2.6/xml/etree/ElementTree.py", line 862, in parse 
    tree.parse(source, parser) 
    File "/usr/lib64/python2.6/xml/etree/ElementTree.py", line 587, in parse 
    self._root = parser.close() 
    File "/usr/lib64/python2.6/xml/etree/ElementTree.py", line 1254, in close 
    self._parser.Parse("", 1) # end of data 
xml.parsers.expat.ExpatError: no element found: line 1, column 0 

更新:

私は私私のHDFSディレクトリに10-15 xmlファイルを持っています欲しいパースする。私は1つだけのXMLがディレクトリに存在するときにxmlを解析することができますが、すぐに私はxmlを解析することができない複数のファイル数を持っている。このユースケースでは、私は私のディレクトリから1つのファイルを解析することができるようにpythonコードを書きたいと思います。

答えて

1

例外は、ディレクトリ上のファイル操作を実行しようとしているcat: '/user/cloudera/CCMD': Is a directory

です。ファイルのパスをコマンドに渡します。代わりにsubprocess

このコマンドを使用し、

hadoop fs -cat /user/cloudera/CCMD/filename 
+0

ファイル名は違うかもしれませんが、ファイルが保存されるディレクトリは同じです。パスにfilenameの代わりにディレクトリ名を指定します。 – animal

+0

私のディレクトリには、1つのファイルではなく複数のファイルが読み込まれます。 – animal

+0

その後、 'hadoop fs -cat'はあなたのコマンドではありません。 hdfsディレクトリにあるファイルのリストを取得し、取得したファイル名を使用してそれらのファイルを読み込みます。なぜ買う?なぜあなたはhdfsからファイルを読み込もうとしていますか?読み込んだデータを次の段階で処理する場合は、MapReduceを書き込みます。 – franklinsijo

1

あなたはディレクトリ内のすべてのファイルの読み取りには、ワイルドカード文字*を使用することができます。

hadoop fs -cat /user/cloudera/CCMD/* 

それとも、xmlファイルの読み込みを:

hadoop fs -cat /user/cloudera/CCMD/*.xml 
+0

ディレクトリに1つのファイルがある場合に動作しますが、ディレクトリに複数のxmlファイルがあるとエラーが表示されます。 'tree = ET.parse(cat.stdout) ファイル" /usr/lib64/python2.6/xml/etree/ElementTree.py "、行862、解析中 xml.parsers.expat.ExpatError:ドキュメント後のジャンク要素:行12266、列19 [cloudera @ server〜] $ cat:出力ストリームに書き込めません。 cat:出力ストリームに書き込めません。 ' – animal

+0

'hdfs'からすべてのファイルを読むのは' * 'ですが、[これを見てください](https://www.knowbigdata.com/page/hdfs-hadoop-fs-cat –

+0

'hadoop fs -cat/user/cloudera/CCMD/*'このコマンドは一度に1つずつ、またはすべてのファイルを読み込みますか? – animal

関連する問題