在通过sparkcontext加载之前,我想检查hdfs中是否存在多个文件。我用Pypark。我试过了 os.system("hadoop fs -test -e %s" %path) 但由于我有很多路要查,工作失败了。我也试过了 sc.wholeTextFiles(parent_path) 然后按键过滤。但它崩溃也是因为父路径包含很多子路径和文件。你能帮我吗?
os.system("hadoop fs -test -e %s" %path)
sc.wholeTextFiles(parent_path)
xxe27gdn1#
一种可能性是你可以使用 hadoop fs -lsr your_path 获取所有路径,然后检查您感兴趣的路径是否在该集中。关于你的坠机事件,很可能是所有打给你的电话的结果 os.system ,而不是特定于hadoop命令。有时调用外部进程可能会导致与永远不会释放的缓冲区相关的问题,特别是i/o缓冲区(stdin/stdout)。一种解决方案是对在所有路径上循环的bash脚本进行一次调用。您可以在代码中使用字符串模板创建脚本,在脚本中填充路径数组,编写脚本,然后执行。切换到 subprocess python的模块,它使您能够更精确地控制子流程的处理。这是相当于 os.system :
hadoop fs -lsr your_path
os.system
subprocess
process = subprocess.check_output( args=your_script, stdout=PIPE, shell=True )
请注意,您可以切换 stdout 如果文件句柄有助于调试或使进程更健壮,则可以使用。你也可以切换 shell=True 论据 False 除非你要调用一个实际的脚本或者使用特定于shell的东西,比如管道或者重定向。
stdout
shell=True
False
pxiryf3j2#
特里斯坦·里德是怎么说的:…(spark)它可以读取许多格式,并且它支持hadoop glob表达式,这对于从hdfs中的多个路径读取非常有用,但是它没有我所知道的用于遍历目录或文件的内置工具,也没有特定于与hadoop或hdfs交互的实用程序。无论如何,这是他对一个相关问题的回答:pyspark:get hdfs路径上的文件/目录列表一旦目录中有了文件列表,就可以很容易地检查特定文件是否存在。我希望它能有所帮助。
enxuqcxy3#
你试过用pydoop吗?这个 exists 功能应该起作用
exists
3条答案
按热度按时间xxe27gdn1#
一种可能性是你可以使用
hadoop fs -lsr your_path
获取所有路径,然后检查您感兴趣的路径是否在该集中。关于你的坠机事件,很可能是所有打给你的电话的结果
os.system
,而不是特定于hadoop命令。有时调用外部进程可能会导致与永远不会释放的缓冲区相关的问题,特别是i/o缓冲区(stdin/stdout)。一种解决方案是对在所有路径上循环的bash脚本进行一次调用。您可以在代码中使用字符串模板创建脚本,在脚本中填充路径数组,编写脚本,然后执行。
切换到
subprocess
python的模块,它使您能够更精确地控制子流程的处理。这是相当于os.system
:请注意,您可以切换
stdout
如果文件句柄有助于调试或使进程更健壮,则可以使用。你也可以切换shell=True
论据False
除非你要调用一个实际的脚本或者使用特定于shell的东西,比如管道或者重定向。pxiryf3j2#
特里斯坦·里德是怎么说的:
…(spark)它可以读取许多格式,并且它支持hadoop glob表达式,这对于从hdfs中的多个路径读取非常有用,但是它没有我所知道的用于遍历目录或文件的内置工具,也没有特定于与hadoop或hdfs交互的实用程序。
无论如何,这是他对一个相关问题的回答:pyspark:get hdfs路径上的文件/目录列表
一旦目录中有了文件列表,就可以很容易地检查特定文件是否存在。
我希望它能有所帮助。
enxuqcxy3#
你试过用pydoop吗?这个
exists
功能应该起作用