Cha*_*dra 21 hadoop hdfs apache-spark
我是新手,我有一个问题.我有一个两步过程,第一步是将SUCCESS.txt文件写入HDFS上的某个位置.我的第二步是一个spark作业,必须在开始处理数据之前验证该SUCCESS.txt文件是否存在.
我检查了spark API并没有找到任何检查文件是否存在的方法.任何想法如何处理这个?
我找到的唯一方法是sc.textFile(hdfs:///SUCCESS.txt).count(),当文件不存在时会抛出异常.我必须捕获该异常并相应地编写我的程序.我真的不喜欢这种方法.希望找到更好的选择.
小智 45
对于HDFS中的文件,您可以使用hadoop方式执行此操作:
val conf = sc.hadoopConfiguration
val fs = org.apache.hadoop.fs.FileSystem.get(conf)
val exists = fs.exists(new org.apache.hadoop.fs.Path("/path/on/hdfs/to/SUCCESS.txt"))
Run Code Online (Sandbox Code Playgroud)
对于Pyspark,无需使用以下方法即可调用子流程来实现此目的:
fs = sc._jvm.org.apache.hadoop.fs.FileSystem.get(sc._jsc.hadoopConfiguration())
fs.exists(sc._jvm.org.apache.hadoop.fs.Path("path/to/SUCCESS.txt"))
Run Code Online (Sandbox Code Playgroud)
我会说,通过在传统的hadoop文件检查中内部检查文件存在的函数调用此方法的最佳方法.
object OutputDirCheck {
def dirExists(hdfsDirectory: String): Boolean = {
val hadoopConf = new org.apache.hadoop.conf.Configuration()
val fs = org.apache.hadoop.fs.FileSystem.get(hadoopConf)
fs.exists(new org.apache.hadoop.fs.Path(hdfsDirectory))
}
}
Run Code Online (Sandbox Code Playgroud)
使用 Databricks dbutils:
def path_exists(path):
try:
if len(dbutils.fs.ls(path)) > 0:
return True
except:
return False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37099 次 |
| 最近记录: |