#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? Его рабочая книга может обрабатывать общие файловые объекты, а также входной поток (так что это может быть точкой преобразования).
Заранее спасибо