Учитывая путь hdfs, как я узнаю, является ли это папкой или файлом с python - PullRequest
0 голосов
/ 02 ноября 2018

Я не проверяю локальный файл, я хочу выяснить для заданной строки - папка ли это или файл в HDFS, в python.

Например, строка может иметь вид:

HDFS: // nameservice1 / клиент / tdb_histscen_2 / часть-00001

Это может быть файл или папка, содержащая папку (и) и / или файл (ы)

Большое спасибо.

Обновлено 20181105 согласно предложению Джима Тодда ниже:

hdfs: // nameservice1 / client / nova / сценарии / склад / pricetek_ibbk / tdb_histscen_asd / не существует вообще

hdfs: // nameservice1 / client / nova / сценарии / склад / pricetek_ibbk / tdb_histscen_2 - это папка

Как вы можете видеть ниже, -test возвращает тот же результат для них, что мне здесь не хватает?

Спасибо.

[rxie@cedgedev03 code]$ hdfs dfs -test -e hdfs://nameservice1/client/nova/scenarios/warehouse/pricetek_ibbk/tdb_histscen_asd/
[rxie@cedgedev03 code]$ hdfs dfs -test -e hdfs://nameservice1/client/nova/scenarios/warehouse/pricetek_ibbk/tdb_histscen_2/
[rxie@cedgedev03 code]$ hdfs dfs -test -d hdfs://nameservice1/client/nova/scenarios/warehouse/pricetek_ibbk/tdb_histscen_2/
[rxie@cedgedev03 code]$ hdfs dfs -test -d hdfs://nameservice1/client/nova/scenarios/warehouse/pricetek_ibbk/tdb_histscen_asd/

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Если вы намереваетесь проверить, является ли URI каталогом или не использует python, вы можете проверить альтернативно, как показано ниже:

import subprocess
location='hdfs://nameservice1/client/tdb_histscen_2/part-00001'

filexistchk="hdfs dfs -test -e "+location+";echo $?"
#echo $? will print the exit code of previously execited command
filexistchk_output=subprocess.Popen(filexistchk,shell=True,stdout=subprocess.PIPE).communicate()
filechk="hdfs dfs -test -d "+location+";echo $?"
filechk_output=subprocess.Popen(filechk,shell=True,stdout=subprocess.PIPE).communicate()
#Check if location exists
if '1' not in str(filexistchk_output[0]):
    #check if its a directory
    if '1' not in str(filechk_output[0]):
        print('The given URI is a directory: '+location)
    else:
        print('The given URI is a file: '+location)
else:
    print(location+ " does not exist. Please check the URI")

О команде: hdfs dfs -test - [ezd] URI

Опции: опция -e проверит, существует ли файл, и вернет 0, если истина. Опция -z проверит, имеет ли файл нулевую длину, и вернет 0, если истина. Опция -d проверит, является ли путь каталогом, и вернет 0, если истина. Пример: hdfs dfs -test -d $ yourdir

0 голосов
/ 03 ноября 2018

В Python есть несколько библиотек для работы с Hadoop. Например, если вы используете Pydoop, вы можете использовать pydoop.hdfs.path.isfile метод.

Вы можете проверить их документацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...