#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 — это путь. Обработка исключения и заставить его работать нехорошо.