Spark не удается прочитать файл parquet из секционированной корзины S3

#scala #apache-spark #amazon-s3

#scala #apache-spark #amazon-s3

Вопрос:

У меня есть разделенный сегмент S3 следующим образом:

 bucket
|--2018
|--2019
    |--01
    |--02
       |--01
          |--files.parquet
...
  

Он отлично работает, когда я читаю с помощью этой команды (Spark 2.1.1):

 val dfo = sqlContext.read.parquet("s3://bucket/2019/04/03/*")
  

но он выдает ошибку, когда я пытаюсь добавить переменную раздела в path:

 val dfo = sqlContext.read.parquet("s3://bucket/2019/04/day=03/*")
or
val dfo = sqlContext.read.parquet("s3://bucket/y=2019/m=04/day=03") 
  

Ошибка:

 Name: org.apache.spark.sql.AnalysisException
Message: Path does not exist: s3://bucket/2019/04/day=03/*;
StackTrace:   at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$14.apply(DataSource.scala:377)
  at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$14.apply(DataSource.scala:370)
  at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
  at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
  at scala.collection.immutable.List.foreach(List.scala:381)
  at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
  at scala.collection.immutable.List.flatMap(List.scala:344)
  at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:370)
  at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
  at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:441)
  at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:425)
  

Комментарии:

1. Файловая структура S3, которая у вас есть, не является структурой секционирования. Правильная секционированная структура должна быть похожа на ‘s3: // bucket/year = 2019 /month = 04 /day = 03/’.

2. @Munesh спасибо за ответ. не уверен, правильно ли я понимаю, вы имеете в виду, что мне нужно изменить структуру на s3? в коде добавление переменной ко всем из них у меня не сработало.

3. ДА. Вам необходимо обновить структуру s3, чтобы обрабатывать данные как секционированные.

4. @Munesh не могли бы вы привести пример или ссылку на ссылку?