Вы можете использовать глагол LISTSTATUS
. Документы находятся в List a Directory, и следующий код можно найти на WebHDFS REST API документах:
С curl
, это то, что он выглядит следующим образом:
curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=LISTSTATUS"
Ответ является FileStatuses JSON объектом:
{
"name" : "FileStatuses",
"properties":
{
"FileStatuses":
{
"type" : "object",
"properties":
{
"FileStatus":
{
"description": "An array of FileStatus",
"type" : "array",
"items" : fileStatusProperties
}
}
}
}
}
fileStatusProperties (для items
поля) имеет эту схему в формате JSON:
var fileStatusProperties =
{
"type" : "object",
"properties":
{
"accessTime":
{
"description": "The access time.",
"type" : "integer",
"required" : true
},
"blockSize":
{
"description": "The block size of a file.",
"type" : "integer",
"required" : true
},
"group":
{
"description": "The group owner.",
"type" : "string",
"required" : true
},
"length":
{
"description": "The number of bytes in a file.",
"type" : "integer",
"required" : true
},
"modificationTime":
{
"description": "The modification time.",
"type" : "integer",
"required" : true
},
"owner":
{
"description": "The user who is the owner.",
"type" : "string",
"required" : true
},
"pathSuffix":
{
"description": "The path suffix.",
"type" : "string",
"required" : true
},
"permission":
{
"description": "The permission represented as a octal string.",
"type" : "string",
"required" : true
},
"replication":
{
"description": "The number of replication of a file.",
"type" : "integer",
"required" : true
},
"type":
{
"description": "The type of the path object.",
"enum" : ["FILE", "DIRECTORY"],
"required" : true
}
}
};
Вы можете обрабатывать имена файлов в Python с использованием pywebhdfs, как это:
import json
from pprint import pprint
from pywebhdfs.webhdfs import PyWebHdfsClient
hdfs = PyWebHdfsClient(host='host',port='50070', user_name='hdfs') # Use your own host/port/user_name config
data = hdfs.list_dir("dir/dir") # Use your preferred directory, without the leading "/"
file_statuses = data["FileStatuses"]
pprint file_statuses # Display the dict
for item in file_statuses["FileStatus"]:
print item["pathSuffix"] # Display the item filename
Вместо print
ИНГ каждого объекта, вы можете работать с деталями, как вам нужно. Результат от file_statuses
- это просто Python dict
, поэтому его можно использовать как любой другой dict
при условии, что вы используете правильные клавиши.
Можно ли использовать для извлечения имен файлов внутри каталога? – DPEZ
Это полностью и полностью * зависит от того, какой язык вы пытаетесь использовать для этого. Поскольку вы не включили это в исходный вопрос, я предположил, что это было несущественно для вас, и что вы сможете его обработать, как только вы узнаете, что глагол используется. Если вы обновите вопрос с подробной информацией о том, какой язык (C++, Python, Ruby, PHP, Fortran и т. Д.) Вы используете, это позволит ответить на этот вопрос. Пожалуйста, будьте как можно более подробными (например, Python 2.7 отличается от Python 3.0, Ruby 1.8.7 отличается от Ruby 2.3.1, C отличается от C++ и т. Д.). –
Конечно, язык, который мы используем на данный момент, это python – DPEZ