pyspark:如何检查hdfs中是否存在文件

pdtvr36n  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(1226)

在通过sparkcontext加载之前,我想检查hdfs中是否存在多个文件。我用Pypark。我试过了 os.system("hadoop fs -test -e %s" %path) 但由于我有很多路要查,工作失败了。我也试过了 sc.wholeTextFiles(parent_path) 然后按键过滤。但它崩溃也是因为父路径包含很多子路径和文件。你能帮我吗?

xxe27gdn

xxe27gdn1#

一种可能性是你可以使用 hadoop fs -lsr your_path 获取所有路径,然后检查您感兴趣的路径是否在该集中。
关于你的坠机事件,很可能是所有打给你的电话的结果 os.system ,而不是特定于hadoop命令。有时调用外部进程可能会导致与永远不会释放的缓冲区相关的问题,特别是i/o缓冲区(stdin/stdout)。
一种解决方案是对在所有路径上循环的bash脚本进行一次调用。您可以在代码中使用字符串模板创建脚本,在脚本中填充路径数组,编写脚本,然后执行。
切换到 subprocess python的模块,它使您能够更精确地控制子流程的处理。这是相当于 os.system :

process = subprocess.check_output(
        args=your_script,
        stdout=PIPE,
        shell=True
    )

请注意,您可以切换 stdout 如果文件句柄有助于调试或使进程更健壮,则可以使用。你也可以切换 shell=True 论据 False 除非你要调用一个实际的脚本或者使用特定于shell的东西,比如管道或者重定向。

pxiryf3j

pxiryf3j2#

特里斯坦·里德是怎么说的:
…(spark)它可以读取许多格式,并且它支持hadoop glob表达式,这对于从hdfs中的多个路径读取非常有用,但是它没有我所知道的用于遍历目录或文件的内置工具,也没有特定于与hadoop或hdfs交互的实用程序。
无论如何,这是他对一个相关问题的回答:pyspark:get hdfs路径上的文件/目录列表
一旦目录中有了文件列表,就可以很容易地检查特定文件是否存在。
我希望它能有所帮助。

enxuqcxy

enxuqcxy3#

你试过用pydoop吗?这个 exists 功能应该起作用

相关问题