当前位置: 首页 > 知识库问答 >
问题:

使用python在远程计算机上列出HDFS目录

刘高驰
2023-03-14

在谷歌上搜索了很长时间后,我没有找到一个pyspark接口来获取文件列表。似乎pyspark没有提供这样的接口。

我看到一个SO回答,说我需要使用hdfscli并将其导入到我的python脚本中。这也是唯一的办法吗?我不敢相信Spark没有hdfs文件列表的方法。

共有1个答案

邓英卓
2023-03-14

不清楚你所说的“远程”机器是什么意思。如果你指的是直接连接到集群(即集群的一部分)的机器,我的另一个答案成立;如果您指的是一台不属于集群的机器,那么正如@jedijs所建议的那样,答案是使用pywebhdfs(简单地通过pip install pywebhdfs安装):

from pywebhdfs.webhdfs import PyWebHdfsClient
from pprint import pprint

hdfs = PyWebHdfsClient(host='192.10.10.73',port='50070', user_name='ctsats')  # your Namenode IP & username here
my_dir = 'user/ctsats'
pprint(hdfs.list_dir(my_dir))

结果是一个(相当长的)Python字典(未显示)--稍微试验一下,以获得一种感觉。您可以解析它以获得名称和类型(文件/目录),如下所示:

data = hdfs.list_dir(my_dir)
pprint([[x["pathSuffix"], x["type"]] for x in data["FileStatuses"]["FileStatus"]])
# [[u'.Trash', u'DIRECTORY'],
#  [u'.sparkStaging', u'DIRECTORY'],
#  [u'checkpoint', u'DIRECTORY'],
#  [u'datathon', u'DIRECTORY'],
#  [u'ms-spark', u'DIRECTORY'],
#  [u'projects', u'DIRECTORY'],
#  [u'recsys', u'DIRECTORY'],
#  [u'sparklyr', u'DIRECTORY'],
#  [u'test.data', u'FILE'],
#  [u'word2vec', u'DIRECTORY']]

为了进行比较,下面是同一目录的实际列表:

[ctsats@dev-hd-01 ~]$ hadoop fs -ls
Found 10 items
drwx------   - ctsats supergroup          0 2016-06-08 13:31 .Trash
drwxr-xr-x   - ctsats supergroup          0 2016-12-15 20:18 .sparkStaging
drwxr-xr-x   - ctsats supergroup          0 2016-06-23 13:23 checkpoint
drwxr-xr-x   - ctsats supergroup          0 2016-02-03 15:40 datathon
drwxr-xr-x   - ctsats supergroup          0 2016-04-25 10:56 ms-spark
drwxr-xr-x   - ctsats supergroup          0 2016-06-30 15:51 projects
drwxr-xr-x   - ctsats supergroup          0 2016-04-14 18:55 recsys
drwxr-xr-x   - ctsats supergroup          0 2016-11-07 12:46 sparklyr
-rw-r--r--   3 ctsats supergroup         90 2016-02-03 16:55 test.data
drwxr-xr-x   - ctsats supergroup          0 2016-12-15 20:18 word2vec
<property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
</property>
 类似资料:
  • 问题内容: 任何人都可以告诉我或指向我列出远程计算机中所有jndi条目的代码吗 问题答案: 可以列出InitialContext的所有条目。您可以使用以下代码段: 如果使用的是应用程序服务器,通常可以选择浏览JNDI树。

  • 问题内容: 我正在Ubuntu上用python编写程序,以在RaspberryPi上执行命令,并与网络连接。 有人可以指导我该怎么做吗? 问题答案: 当然,有几种方法可以做到! 假设您在主机上安装了Raspberry Pi,并且用户名是。 这是运行命令的默认Python库。 您可以使其运行并在远程服务器上执行所需的任何操作。 scrat已在他的回答中提及。如果您不想使用任何第三方库,则绝对应该这样

  • 问题内容: 我有一个python代码在名为A的远程计算机上进行一些计算。我通过名为B的计算机通过A连接到A。是否可以在B的计算机上显示图形? 问题答案: 如果在远程计算机(B)上的Mac OS X上使用matplotlib,则必须首先确保使用基于X11的显示后端之一,因为本机Mac OS X后端无法将其图导出到另一个显示。选择后端可以通过 可以通过提供不正确的后端名称来获得受支持的后端列表:mat

  • 我尝试使用JSCH连接到远程windows计算机,连接成功。 我也尝试停止cygwin服务,但连接不成功。 我想连接到一个没有安装cygwin的远程windows机器,并使用java在命令提示符中执行命令。 我有机会查看Psexec工具,但安全性受到了冲击。 有人能建议一些其他的想法来连接到远程windows机器使用Java并执行命令吗?

  • 问题内容: 我在本地计算机上有一个目录,我想使用Fabric将其复制到远程计算机上(并重命名)。我知道我可以使用复制文件,但是目录呢。我知道使用 scp 很容易,但是如果可能的话,我宁愿在我内部进行。 问题答案: 您也可以使用它(至少在1.0.0中使用): 可以是相对或绝对本地文件或 目录路径 ,并且可以包含 shell样式的通配符 ,如Python glob 模块所理解的那样。波形扩展(由os.

  • 我见过几个与这个话题有关的问题和答案,但我一直无法掌握如何做。 > 我所能做的:使用Python脚本(使用Paramiko)连接到远程计算机,并返回信息,例如,ping交换机: ssh=pk.sshclient() ssh.connect(“{}”.format(IP),port=xxx,username='xxx',password='xxx') stdin,stdout,stderr=\“ s