如何检查Spark[使用scala]中是否存在s3path?
我正在寻找一种更干净的方法来检查S3路径是否为空 我当前的代码如下所示如何检查Spark[使用scala]中是否存在s3path?,scala,apache-spark,emr,Scala,Apache Spark,Emr,我正在寻找一种更干净的方法来检查S3路径是否为空 我当前的代码如下所示 if (!s3Path.isEmpty) { try { var rdd = sc.textFile(s3Path) rdd.partitions.size } catch { case _: org.apache.hadoop.mapred.InvalidInputException => (sc.parallelize(List())) } } 我想在不创建RDD
if (!s3Path.isEmpty) {
try {
var rdd = sc.textFile(s3Path)
rdd.partitions.size
} catch {
case _: org.apache.hadoop.mapred.InvalidInputException =>
(sc.parallelize(List()))
}
}
我想在不创建RDD的情况下执行此操作。我检查s3path,看看它是否有效,然后将其传递给Spark以创建RDD,如下所示
public boolean checkIfS3PathsValid(String bucketName, String key)
{
try{
ObjectListing list = s3.listObjects(bucketName,key);
List<S3ObjectSummary> objectInfoList = list.getObjectSummaries();
if(objectInfoList.size()>0)
{
return true;
}
else
{
return false;
}
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
}
因此,在代码中,调用checkIfS3PathsValid并查看它是否返回true。如果是,那么只有您使用sc.textfile创建RDD,否则您将忽略该s3path。我认为没有办法使用通配符来实现这一点。你能确认一下吗。我只是想检查前缀是否存在,但不想在所有键上循环,这是我们通常用来获取所有公共前缀的方法。@RaghvendraSingh您能确定公共前缀下的单个文件名吗?假设您在按顺序编号的部分中生成文件,例如,只要有数据,前缀-00000就始终存在,您可以使用getObjectMetadata方法获取该文件的元数据,如果存在异常,则该文件不存在,因此前缀不存在。如果不能,列表请求中有一个名为maxSize的设置,您可以将其设置为1以仅获取一个键,这样您就不必“循环所有键”,其工作原理相同。
s3=AmazonS3Client(new PropertiesCredentials("path of your s3 credential file"));