Pyspark中的HDFS文件存在检查

时间:2018-06-07 09:40:14

标签: python-3.x pyspark

任何人都可以建议在pyspark中检查文件存在的最佳方法。

目前正在使用以下方法进行检查,请告知。

def path_exist(path):

try:
    rdd=sparkSqlCtx.read.format("orc").load(path)
    rdd.take(1)
    return True

except Exception as e:
    return False

4 个答案:

答案 0 :(得分:1)

您可以使用subprocess

从python执行hdfs命令
import subprocess

proc = subprocess.Popen(['hadoop', 'fs', '-test', '-e', path])
proc.communicate()

if proc.returncode != 0:
    print '%s does not exist' % path
else : 
    print '%s exists' % path

另见:apache spark - check if file exists

答案 1 :(得分:1)

要在pyspark上的s3上检查文件(类似于@emeth的帖子),您需要将URI提供给FileSystem构造函数。

sc = spark.sparkContext
jvm = sc._jvm
conf = sc._jsc.hadoopConfiguration()
url = "s3://bucket/some/path/_SUCCESS"
uri = jvm.java.net.URI(url)
fs = jvm.org.apache.hadoop.fs.FileSystem.get(uri, conf)
fs.exists(jvm.org.apache.hadoop.fs.Path(url))

答案 2 :(得分:0)

以下代码应该可以工作-

import subprocess

out=subprocess.check_output("hadoop fs -ls /tmp/file.txt",shell=True)

out=out.strip()

out=out.split("\n")

for l in out:

if l.endswith(".txt"):

print "file exit"
    else:
        print "file not exit"

答案 3 :(得分:0)

您可以使用Py4j的Java API org.apache.hadoop.fs.{FileSystem, Path}

jvm = spark_session._jvm
jsc = spark_session._jsc
fs = jvm.org.apache.hadoop.fs.FileSystem.get(jsc.hadoopConfiguration())
if fs.exists(jvm.org.apache.hadoop.fs.Path("/foo/bar")):
    print("/foo/bar exists")
else:
    print("/foo/bar does not exist")