Spark Fixed Width File Import Большое количество столбцов, вызывающих большое время выполнения - PullRequest
0 голосов
/ 12 сентября 2018

Я получаю исходный файл .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 столбцами. Поскольку количество столбцов увеличивается, это также увеличивает время.

Если кто-то сталкивался с такой проблемой с большим количеством столбцов. Мне нужны предложения по настройке производительности, как я могу настроить эту работу или код

...