有人能建议一下在pyspark中检查文件是否存在的最佳方法吗?
目前我正在使用以下方法进行检查,请给予建议。
def path_exist(path):
try:
rdd=sparkSqlCtx.read.format("orc").load(path)
rdd.take(1)
return True
except Exception as e:
return False
有人能建议一下在pyspark中检查文件是否存在的最佳方法吗?
目前我正在使用以下方法进行检查,请给予建议。
def path_exist(path):
try:
rdd=sparkSqlCtx.read.format("orc").load(path)
rdd.take(1)
return True
except Exception as e:
return False
你可以通过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")
您可以使用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
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"
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))