Чтение Excel в Spark Ошибка: InputStream класса ZipArchiveInputStream не реализует InputStreamStatistics - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь читать файлы Excel из COS с помощью spark, например:

    def readExcelData(filePath: String, spark: SparkSession): DataFrame =
        spark.read
          .format("com.crealytics.spark.excel")
          .option("path", filePath)
          .option("useHeader", "true")
          .option("treatEmptyValuesAsNulls", "true")
          .option("inferSchema", "False")
          .option("addColorColumns", "False")
          .load()
  def readAllFiles: DataFrame = {
      val objLst //contains  the list the file paths
      val schema = StructType(
          StructField("col1", StringType, true) ::
            StructField("col2", StringType, true) ::
            StructField("col3", StringType, true) ::
            StructField("col4", StringType, true) :: Nil
        )
      var initialDF = spark.createDataFrame(spark.sparkContext.emptyRDD[Row], schema)
        for (file <- objLst) {
          initialDF = initialDF.union(
            readExcelData(file, spark).select($"col1", $"col2", $"col3", $"col4"))
        }
}

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

Выдает ошибку, подобную этой

java.lang.IllegalArgumentException: InputStream of class class org.apache.commons.compress.archivers.zip.ZipArchiveInputStream is not implementing InputStreamStatistics.
    at org.apache.poi.openxml4j.util.ZipArchiveThresholdInputStream.<init>(ZipArchiveThresholdInputStream.java:63)

Версия sparkExcel - 0.10.2

1 Ответ

0 голосов
/ 03 октября 2019

попробуйте удалить .show () для вашего исходного оператора и сначала конвертировать в dataframe.

def readExcel(file: String): DataFrame = spark.read
        .format("com.crealytics.spark.excel")
        .option("useHeader", "true")
        .option("treatEmptyValuesAsNulls", "true")
        .option("inferSchema", "False")
        .option("addColorColumns", "False")
        .load()
val data = readExcel("path to your excel file")

data.show()
...