Я знаю, что эта проблема чтения большого количества маленьких файлов в HDFS всегда была проблемой и широко обсуждалась, но терпите меня.Большинство проблем переполнения стека, связанных с этим типом проблем, связано с чтением большого количества txt-файлов. Я пытаюсь прочитать большое количество небольших avro-файлов
Кроме того, в этих решениях для чтения txt-файлов рассказывается об использовании WholeTextFileInputFormatили CombineInputFormat (https://stackoverflow.com/a/43898733/11013878), которые являются реализациями RDD, я использую Spark 2.4 (HDFS 3.0.0), и реализации RDD, как правило, не приветствуются, и предпочтительны кадры данных. Я бы предпочел использовать кадры данных, но я также открыт для реализаций RDD.
Я попытался объединить кадры данных, как предложено Муртазой, но на большом количестве файлов я получаю ошибку OOM (https://stackoverflow.com/a/32117661/11013878)
Я использую следующий код
val filePaths = avroConsolidator.getFilesInDateRangeWithExtension //pattern:filePaths: Array[String]
//I do need to create a list of file paths as I need to filter files based on file names. Need this logic for some upstream process
//example : Array("hdfs://server123:8020/source/Avro/weblog/2019/06/03/20190603_1530.avro","hdfs://server123:8020/source/Avro/weblog/2019/06/03/20190603_1531.avro","hdfs://server123:8020/source/Avro/weblog/2019/06/03/20190603_1532.avro")
val df_mid = sc.read.format("com.databricks.spark.avro").load(filePaths: _*)
val df = df_mid
.withColumn("dt", date_format(df_mid.col("timeStamp"), "yyyy-MM-dd"))
.filter("dt != 'null'")
df
.repartition(partitionColumns(inputs.logSubType).map(new org.apache.spark.sql.Column(_)):_*)
.write.partitionBy(partitionColumns(inputs.logSubType): _*)
.mode(SaveMode.Append)
.option("compression","snappy")
.parquet(avroConsolidator.parquetFilePath.toString)
Потребовалось 1,6 минуты, чтобы перечислить 183 небольших файла на уровне задания
Как ни странно, на моей странице пользовательского интерфейса только 3 с (не понимаю, почему)
Файлы avro хранятся в разделах гггг / мм / дд: hdfs: // server123: 8020 / source / Avro / weblog / 2019/06/03
Можно ли как-нибудь ускорить вывод списка листовых файлов, как вы можете из скриншота, только 6 секунд, чтобы собрать файлы паркетных файлов, но 1,3 минуты, чтобы перечислить файлы