Может ли быть настроен спарк, чтобы выводить пустой набор данных в пустую схему - PullRequest
2 голосов
/ 02 апреля 2019

У нас есть много наборов данных паркета, разбитых на год / месяц / день / час.

Некоторые из этих часов пусты, имея только один _SUCCESS файл.

Мы реализуем задания, которые повторяются по всем разделам и выполняем работу. Мы сталкиваемся с проблемами при открытии пустых наборов данных. Сбой с org.apache.spark.sql.AnalysisException: Unable to infer schema for Parquet. It must be specified manually.

(используя EMR5.3.0 - мы работаем над тем, чтобы избавиться от зависимости, чтобы мы могли перейти на более позднюю версию)

Пример Spark-shell:

Welcome to
      ____              __
    / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
  /___/ .__/\_,_/_/ /_/\_\   version 2.1.0
      /_/

Using Scala version 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_121)
Type in expressions to have them evaluated.
Type :help for more information.

scala> val df = spark.read.parquet("s3://some-bucket/empty-dataset/")
org.apache.spark.sql.AnalysisException: Unable to infer schema for Parquet. It must be specified manually.;
  at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$8.apply(DataSource.scala:189)
  at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$8.apply(DataSource.scala:189)

Как говорит spark, я могу указать схему, но это нецелесообразно для меня, поскольку схема велика и отличается для каждого раздела (не спрашивайте).

Мое предпочтительное решение было бы, если бы спарк мог быть настроен на вывод пустых наборов данных в пустые схемы.

1 Ответ

1 голос
/ 02 апреля 2019

В идеале spark.read.parquet должен принимать параметр ignoreEmptyFiles=true, к сожалению, это не поддерживается.

Лучшее, что вы можете сделать, прежде чем читать фильтр пустых каталогов

...