ここに私の問題があります: 私は潜在的に巨大になる可能性のあるファイルを HDFS に持っています (= すべてをメモリに収めるのに十分ではありません)。
私がやりたいことは、このファイルをメモリにキャッシュする必要を避け、通常のファイルで行うように1行ずつ処理することです:
for line in open("myfile", "r"):
# do some processing
外部ライブラリを使用せずにこれを正しく行う簡単な方法があるかどうかを調べています。おそらくlibpyhdfsまたはpython-hdfsで動作させることができますが、システムに新しい依存関係やテストされていないライブラリを導入することはできれば避けたいと思います。生産で使用されます。
Pythonモジュールを使用して標準の「hadoop」コマンドラインツールを使用してこれを行うことを考えていましたsubprocess
が、処理を実行するコマンドラインツールがないため、必要なことを実行できないようです。ストリーミング方式ですべての行に対して Python 関数を実行します。
subprocess モジュールを使用して Python 関数をパイプの右オペランドとして適用する方法はありますか? または、ファイルのようにジェネレーターとして開くと、各行を簡単に処理できますか?
cat = subprocess.Popen(["hadoop", "fs", "-cat", "/path/to/myfile"], stdout=subprocess.PIPE)
外部ライブラリを使用せずに上記のことを達成する別の方法がある場合、私もかなりオープンです。
助けてくれてありがとう!