Пока ваш list_avro_files
может быть выражен с помощью стандартного синтаксиса подстановочных знаков, вы, вероятно, можете использовать собственную способность Spark распараллеливать операции чтения. Все, что вам нужно, это указать basepath
и шаблон имени файла для ваших файлов avro:
scala> var df = spark.read
.option("basepath","/user/hive/warehouse/root")
.format("avro")
.load("/user/hive/warehouse/root/*/*/*/*.avro")
И, если вы обнаружите, что вам нужно точно знать, какой файл любая заданная строка взята из, используйте встроенную функцию input_file_name()
для обогащения вашего фрейма данных:
scala> df = df.withColumn("source",input_file_name())