Я пытался поиграть с mongo-hadoop
, читая несколько дампов MongoDB, но до сих пор я застрял, читая их (во-первых, не уверен, выбирает ли он дампы в пути).
Как сказано в заголовке, он выдает java.lang.NegativeArraySizeException
всякий раз, когда я пытаюсь собрать содержимое RDD.Формат файла дампа .gzip
(он тоже распакован в директории)
val mongoConfig = new Configuration()
mongoConfig.set("mapred.input.dir", "/Users/example/dir_with_dumps")
mongoConfig.set("mongo.job.input.format", "com.mongodb.hadoop.BSONFileInputFormat")
val documents = sparkContext.newAPIHadoopRDD(
mongoConfig,
classOf[BSONFileInputFormat],
classOf[Object],
classOf[BSONObject]
)
documents.collect()
И полученная трассировка стека ...
Exception in thread "main" java.lang.NegativeArraySizeException
at java.util.Arrays.copyOf(Arrays.java:3236)
at org.bson.LazyBSONDecoder.decode(LazyBSONDecoder.java:59)
at com.mongodb.hadoop.splitter.BSONSplitter.splitFile(BSONSplitter.java:240)
at com.mongodb.hadoop.splitter.BSONSplitter.readSplitsForFile(BSONSplitter.java:205)
at com.mongodb.hadoop.BSONFileInputFormat.getSplits(BSONFileInputFormat.java:128)
at org.apache.spark.rdd.NewHadoopRDD.getPartitions(NewHadoopRDD.scala:127)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:253)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:251)
at scala.Option.getOrElse(Option.scala:120)
at org.apache.spark.rdd.RDD.partitions(RDD.scala:251)
at org.apache.spark.rdd.RDD$$anonfun$take$1.apply(RDD.scala:1337)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
at org.apache.spark.rdd.RDD.withScope(RDD.scala:363)
at org.apache.spark.rdd.RDD.take(RDD.scala:1331)
Любая подсказка, как решить эту проблему?Может ли это быть что-то связанное с форматом?
Я видел этот связанный вопрос PySpark: пустой RDD при чтении сжатых файлов BSON , но здесь не применяется, так как работа с Scala отсутствует.не любой .BSONFileRDD
.