Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查Spark[使用scala]中是否存在s3path?_Scala_Apache Spark_Emr - Fatal编程技术网

如何检查Spark[使用scala]中是否存在s3path?

如何检查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

我正在寻找一种更干净的方法来检查S3路径是否为空

我当前的代码如下所示

 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"));