Чтение нескольких файлов из каталога с помощью Spark
Я пытаюсь это решитьпроблема в kaggle с использованием искры:
иерархия ввода выглядит следующим образом:
drivers/{driver_id}/trip#.csv
e.g., drivers/1/1.csv
drivers/1/2.csv
drivers/2/1.csv
Я хочу прочитать родительский каталог«водители» и для каждого подкаталога я хотел бы создатьpairRDD с ключом как(Sub_directory, имя_файл) и значение в качестве содержимого файла
Я проверилэтот ссылку и пытался использовать
val text = sc.wholeTextFiles("drivers")
text.collect()
это не удалось с ошибкой:
java.lang.ArrayIndexOutOfBoundsException: 0
at org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat$OneFileInfo.<init>(CombineFileInputFormat.java:591)
at org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat.getMoreSplits(CombineFileInputFormat.java:283)
at org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat.getSplits(CombineFileInputFormat.java:243)
at org.apache.spark.rdd.WholeTextFileRDD.getPartitions(NewHadoopRDD.scala:267)
at org.apache.spark.rdd.RDD$anonfun$partitions$2.apply(RDD.scala:219)
at org.apache.spark.rdd.RDD$anonfun$partitions$2.apply(RDD.scala:217)
at scala.Option.getOrElse(Option.scala:120)
at org.apache.spark.rdd.RDD.partitions(RDD.scala:217)
at org.apache.spark.SparkContext.runJob(SparkContext.scala:1779)
at org.apache.spark.rdd.RDD$anonfun$collect$1.apply(RDD.scala:885)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:148)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:109)
at org.apache.spark.rdd.RDD.withScope(RDD.scala:286)
at org.apache.spark.rdd.RDD.collect(RDD.scala:884)
но когда я запускаю приведенный ниже код, это работает.
val text = sc.wholeTextFiles("drivers/1")
text.collect()
но я не хочу этого делать, так как здесь мне придется читать каталогводители и зациклить файлы и вызватьwholeTextFiles для каждой записи.