Чтение файлов Excel из S3 с помощью Scala, Spark и org.apache.poi

#excel #scala #apache-spark #amazon-s3 #apache-poi

#превосходить #scala #apache-искра #amazon-s3 #apache-poi

Вопрос:

Я ищу способ открыть и обработать файл Excel (*.xlsx) в Spark job. Я совсем новичок в стеке Scala/Spark, поэтому пытаюсь завершить его питоническим способом 🙂

Без искры все просто:

 val f = new File("src/worksheets.xlsx") val workbook = WorkbookFactory.create(f) val sheet = workbook.getSheetAt(0)  

Но Spark нуждается в потоковом вводе. Я настроил Hadoop для S3 (в моем случае — MinIO)

 val hadoopConf = sparkSession.sparkContext.hadoopConfiguration hadoopConf.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") hadoopConf.set(  "fs.s3a.aws.credentials.provider",  "org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider" ) hadoopConf.set("fs.s3a.path.style.access", "true") hadoopConf.set("fs.s3a.access.key", params.minioAccessKey.get) hadoopConf.set("fs.s3a.secret.key", params.minioSecretKey.get) hadoopConf.set(  "fs.s3a.connection.ssl.enabled",  params.minioSSL.get.toString ) hadoopConf.set("fs.s3a.endpoint", params.minioUrl.get)  val FilterDF = sparkSession.read  .format("com.crealytics.spark.excel")  .option("recursiveFileLookup", "true")  .option("modifiedBefore", "2020-07-01T05:30:00")  .option("modifiedAfter", "2020-06-01T05:30:00")  .option("header", "true")  .load("s3a://first/"); println(FilterDF)  

Итак, вопрос в следующем: как настроить фрейм данных (или, может быть, какое-то другое решение) для фильтрации и сбора файлов в определенном временном диапазоне из корзины S3 и сделать его подходящим для работы с POI Apache? Его рабочая книга может обрабатывать общие файловые объекты, а также входной поток (так что это может быть точкой преобразования).

Заранее спасибо