#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 не могли бы вы привести пример или ссылку на ссылку?