Я знаю, что эта проблема чтения большого количества небольших файлов в HDFS всегда была проблемой и широко обсуждалась, но терпите меня. Большинство проблем с stackoverflow, связанных с этим типом проблем, связаны с чтением большого количества файлов 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)
Чтобы отобразить 183 небольших файла на уровне задания
Как ни странно, на моей странице пользовательского интерфейса сцены просто отображаются 3 секунды (не понимаю почему)
Файлы avro хранятся в разделах yyyy / mm / dd: hdfs: // server123: 8020 / source / Avro / weblog / 2019/06/03
Можно ли как-нибудь ускорить составление списка листовых файлов, как показано на скриншоте, для объединения в паркетные файлы требуется всего 6 секунд, а для перечисления файлов - 1,3 минуты