Я получаю исходный файл .txt фиксированной ширины, из которого мне нужно извлечь столбцы размером 20 КБ.
В связи с отсутствием библиотек для обработки файлов фиксированной ширины с использованием spark, я разработал код, который извлекает поля из текстовых файлов фиксированной ширины.
Код для чтения текстового файла как RDD с
sparkContext.textFile("abc.txt")
затем читает схему JSON и получает имена столбцов и ширину каждого столбца.
В функции, которую я прочитал строку фиксированной длины, и используя начальную и конечную позицию, мы используем функцию подстроки для создания Array
.
Сопоставить функцию с СДР.
Преобразовать вышеуказанный СДР в DF и отобразить colnames
и записать в Паркет.
Представительский код
rdd1=spark.sparkContext.textfile("file1")
{ var now=0
{ val collector= new array[String] (ColLenghth.length)
val recordlength=line.length
for (k<- 0 to colLength.length -1)
{ collector(k) = line.substring(now,now+colLength(k))
now =now+colLength(k)
}
collector.toSeq}
StringArray=rdd1.map(SubstrSting(_,ColLengthSeq))
#here ColLengthSeq is read from another schema file which is column lengths
StringArray.toDF("StringCol")
.select(0 until ColCount).map(j=>$"StringCol"(j) as column_seq(j):_*)
.write.mode("overwrite").parquet("c"\home\")
Этот код прекрасно работает с файлами с меньшим количеством столбцов, однако он занимает много времени и ресурсов с 20K столбцами.
Поскольку количество столбцов увеличивается, это также увеличивает время.
Если кто-то сталкивался с такой проблемой с большим количеством столбцов.
Мне нужны предложения по настройке производительности, как я могу настроить эту работу или код