タイトルのとおり。私はtextFileを認識していますが、名前が示唆するように、テキストファイルでのみ動作します。 HDFS(またはローカルパス)上のパス内のファイル/ディレクトリにアクセスする必要があります。あなたは、ディレクトリ内すべてファイルで読みたい場合は、私はpysparkに助けPyspark:HDFSパス上のファイル/ディレクトリのリストを取得
答えて
Sparkは、データをロードするときにドメインを開始するデータ処理ツールとして考えるのが有益だと思います。それは多くのフォーマットを読むことができ、Hadoopのglob式をサポートしています。これはHDFSの複数のパスからの読み込みには非常に便利ですが、ディレクトリやファイルを走査するのに気づいている組み込み機能はありません。 HadoopまたはHDFSとの相互作用に特有のユーティリティ。
esutilとhdfsなど、必要な操作を行うツールがいくつかあります。 hdfs libはCLIとAPIの両方をサポートしていますので、「PythonでHDFSファイルをリストするにはどうすればいいですか」のように右に移動してくださいhere。それは次のようになります。JVMゲートウェイを使用して
from hdfs import Config
client = Config().get_client('dev')
files = client.list('the_dir_path')
多分そうエレガントではありませんが、いくつかのケースでは、以下のコードは役に立つことができます
URI = sc._gateway.jvm.java.net.URI
Path = sc._gateway.jvm.org.apache.hadoop.fs.Path
FileSystem = sc._gateway.jvm.org.apache.hadoop.fs.FileSystem
Configuration = sc._gateway.jvm.org.apache.hadoop.conf.Configuration
fs = FileSystem.get(URI("hdfs://somehost:8020"), Configuration())
status = fs.listStatus(Path('/some_dir/yet_another_one_dir/'))
for fileStatus in status:
print fileStatus.getPath()
利用代わりに 'fileStatus'の' globStatus'あなたは結果をフィルタリングする場合、例えば'status = fs.globStatus(Path( '/ some_dir/yet_another_one_dir/*。csv ')) ' –
spark-submitするために追加のライブラリをアップロードする必要がないので、これはかなり良いことです。 –
ありがとうございます。 – Tony
あなたがPySparkを使用する場合は、対話的にコマンドを実行することができます:
リスト選択したディレクトリのすべてのファイル:
hdfs dfs -ls <path>
例:hdfs dfs -ls /user/path
:
import os
import subprocess
cmd = 'hdfs dfs -ls /user/path'.split()
files = subprocess.check_output(cmd).strip().split('\n')
for path in files:
print path
または選択したディレクトリ内のファイルを検索します。
hdfs dfs -find <path> -name <expression>
例:hdfs dfs -find /user/path -name *.txt
:
import os
import subprocess
cmd = 'hdfs dfs -find {} -name *.txt'.format(source_dir).split()
files = subprocess.check_output(cmd).strip().split('\n')
for path in files:
filename = path.split(os.path.sep)[-1].split('.txt')[0]
print path, filename
こんにちは ファイル= subprocess.check_output(cmd_find).strip()。split( '\ n') be files = subprocess.check_output(cmd).strip()。split( '\ n') 私は編集しようとしましたが、編集は6つ以上の変更が必要だと言いました。 –
これを行う簡単な方法がありますsnakebiteライブラリを使用して
from snakebite.client import Client
hadoop_client = Client(HADOOP_HOST, HADOOP_PORT, use_trash=False)
for x in hadoop_client.ls(['/']):
... print x
- 1. batファイルディレクトリのパスを取得
- 2. asp.netのサーバー上でローカルファイルのhttp urlパスを取得します
- 3. 私のパス上のプログラムのリストをPerlから取得するにはどうすればよいですか?
- 4. 取得パス
- 5. FileSystemInfoインスタンスのパスの取得
- 6. Symfony2上のすべてのリスナーとリストを取得
- 7. SignalR - サーバ上の接続IDのリストを取得する
- 8. システム上のサウンドカードのリストを取得する方法は?
- 9. データベース上のアクティブなトリガのリストを取得する方法は?
- 10. ファイルディレクトリをJavaでInputStreamのリストに変換する方法8
- 11. 取得相対パス
- 12. 階層テーブル - アイテムのパスを取得する方法[MySQLのリンクされたリスト]
- 13. コンテンツのファイルの絶対パスを取得
- 14. Vistaのポータブルデバイスへのパスを取得
- 15. c#プロジェクト内のディレクトリのパスを取得
- 16. pyqt QFileDialog.getOpenFileName()ファイルのディレクトリのパスを取得
- 17. C++他のユーザーのappdataパスを取得
- 18. Androidのギャラリーフォルダのパスを取得する
- 19. SWIFT:パスを取得する
- 20. ファイルディレクトリの定義。 xampp
- 21. リストのリストから要素を取得
- 22. Windows上でNode.js内のファイルのcase-exactパスを取得する方法は?
- 23. SharePointリストの列を取得
- 24. Androidテーブルのリストを取得
- 25. は、私はパスでファイルのリストを取得することができます
- 26. Team Foundationsバージョンコントロール - VersionControlServer - パスからフォルダとファイルのリストを取得しますか?
- 27. Android 6ダウンロードファイルへのパスを取得
- 28. WebLogicで現在のEARパスを取得
- 29. Firebaseリファレンスのパスを取得する
- 30. djangoファイルフィールドから元のパスを取得
こんにちは、私はhdfscli.cfgファイルを作成する方法を教えてください、私はそれを置くためにどのポート番号を知っていますか? [グローバル] default.alias = DEV [dev.alias] URL =のhttp://dev.namenode:ポート ユーザー=アン –