据我所知,没有现成的解决方案,我找到的大多数答案都是通过调用hdfs命令来实现的。我在Linux上运行,也面临同样的挑战。我发现sh包很有用。它处理为您运行o/s命令和管理stdin/out/err。
不是最新的解决方案,但它是一行(ish)并使用标准包。
这是我获取HDFS目录列表的精简代码。它会列出类似的文件和文件夹,因此如果需要区分它们,您可能需要修改它们。import sh
hdfsdir = '/somedirectory'
filelist = [ line.rsplit(None,1)[-1] for line in sh.hdfs('dfs','-ls',hdfsdir).split('\n') if len(line.rsplit(None,1))][1:]
我的输出-在本例中,这些都是目录:[u'/somedirectory/transaction_basket_fct/date_id=2015-01-01',
u'/somedirectory/transaction_basket_fct/date_id=2015-01-02',
u'/somedirectory/transaction_basket_fct/date_id=2015-01-03',
u'/somedirectory/transaction_basket_fct/date_id=2015-01-04',
u'/somedirectory/transaction_basket_fct/date_id=2015-01-05',
u'/somedirectory/transaction_basket_fct/date_id&#