Как прочитать весь каталог XLSX с Apache Spark Scala? - PullRequest
0 голосов
/ 19 октября 2019

Мне нужно прочитать весь каталог файлов xlsx, и мне нужно загрузить все каталоги с помощью apache spark, используя scala;на самом деле я использую эту зависимость: "com.crealytics" %% "spark-excel"% "0.12.3", и я не знаю, как загрузить все

1 Ответ

1 голос
/ 19 октября 2019

Похоже, что ярлык не может быть добавлен в метод пути через опцию. Поэтому я создал обходной путь, как показано ниже (при условии, что каждый файл Excel имеет одинаковое количество столбцов). Создал метод для получения всех путей каждого файла в исходном каталоге и провел цикл по этим путям файлов, создав новый фрейм данных и добавив предыдущий.

import java.io.File
import org.apache.spark.sql.Row
import org.apache.spark.sql.types._

def getListOfFiles(dir : String) : List[File] = {
  val d = new File(dir)
  if (d.exists && d.isDirectory){
    d.listFiles().filter(_.isFile).toList
  } else {
      List[File]()
  }
}

val path = " \\directory path"

// shows list of files with fully qualified paths
println(getListOfFiles(path))

val schema = StructType(
    StructField("id", IntegerType, true) ::
    StructField("name", StringType, false) ::
    StructField("age", IntegerType, false) :: Nil)


// Created Empty dataframe with as many columns as in each excel
var data = spark.createDataFrame(spark.sparkContext.emptyRDD[Row], schema)
for(filePath <- getListOfFiles(path)){
  var tempDF = spark.read.format("com.crealytics.spark.excel")
    .option("location", s"$filePath")
    .option("useHeader", "true")
    .option("treatEmptyValuesAsNulls", "true")
    .option("inferSchema", "true")
    .option("addColorColumns", "False")
    .load()
  data = data.union(tempDF)
}

data.show()
...