Чтение нескольких файлов из каталога с помощью 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 для каждой записи.

Ответы на вопрос(1)

Ваш ответ на вопрос