SparkContext.wholeTextFiles(location) не генерирует исключение для отсутствующего пути, пока не будет выполнено действие

#apache-spark #pyspark #apache-spark-sql #spark-streaming

#apache-spark #pyspark #apache-spark-sql #искровая передача

Вопрос:

Я считываю данные, представленные в часовом формате, присутствующие в S3, через spark.Например,

SparkContext.wholeTextFiles(«s3://’Bucket’/’key’/’гггг’/’ММ’/’дд’ /’чч’ / *»).

Приведенный выше метод возвращает пару (ключ, значение), которая является (Имя файла, содержимое).

Проблема

SparkContext.wholeTextFiles(«location»).values возвращает RDD, который не генерирует исключение, если «местоположение» в S3 отсутствует, пока не будет выполнено действие с этим RDD.

Текущий код для проверки, присутствует ли указанное местоположение или нет

  val data = sparkSession.sparkContext
  .wholeTextFiles(location)
  .values
Try {
  data.isEmpty()
}
 case Success(_)=>{}
 case Failure(_)=>{}
 

Возвращаемое значение для данных, даже если местоположение отсутствует: MapPartitionsRDD[2]

Возвращаемое значение после выполнения действия isEmpty() над данными равно

org.apache.hadoop.mapreduce.lib.input.InvalidInputException: входной путь не существует:

Вопрос

Я использую своего рода хак для выполнения действия isEmpty() (я могу использовать и любое другое действие) для data RDD, чтобы выдать сбой в случае, если местоположение отсутствует, в противном случае, если эта проверка не выполнена, она завершается с ошибкой и выдает то же исключение, что и выше, когда эти данные используются позже из-заотложенная оценка.

Я хотел спросить, является ли это правильным подходом для проверки наличия местоположения для чтения данных, поскольку действие необходимо выполнить на RDD?

Ответ №1:

Короче говоря, принятие решений по исключениям — не лучшая стратегия.

вы можете использовать FileSystem API Hadoop для проверки путей, прежде чем запускать обработку через spark.

Spark обрабатывает вещи лениво. Это ожидаемое поведение и причина, по которой вы получаете ошибку при выполнении действия.

Комментарии:

1. Проверка того, существует файл или нет, с помощью API файловой системы hadoop — это путь. Обработка исключения и заставить его работать нехорошо.