#apache-spark #apache-spark-sql
Вопрос:
Мое требование-прочитать два файла: один на предыдущую дату и один на сегодняшнюю дату. И объединил данные из обоих файлов и сохранил их в новом файле, в имени которого будет указана дата.
Например: файл_24012021.avro-файл предыдущей даты, а файл_25012021.csv-файл сегодняшней даты. Таким образом, после объединения данных данные будут сохранены в файле 25012021.avro. И файл_25012021.csv может содержать данные максимум за 100 дней.
Для достижения этой цели я написал YML, как показано ниже.
frameworkComponents:
prev_file:
inputDirectoryPath: <path of the file>
componentName: prev_file
componentType: inputLoader
hadoopfileFormat: avro
findLastNonContiguousSetSize: 1
findLastContiguousSetSize: -1
new_file:
inputDirectoryPath: <path of the file>
componentName: new_file
componentType: inputLoader
hadoopfileFormat: csv
fixedWidthFileMetaData: |-
[{“fieldname”: “ID”,”startPos”: 1,”endPos”: 3,”colType”: “CHAR”}, {“fieldname”: “ID_1”,”startPos”: 4,”endPos”: 6,”colType”: “CHAR”}….. for all columns present in file]
skipInitialNoofLines: 1
skipLastNoofLines: 1
selectstmt:
componentName: selectstmt
componentType: executeSparlSQL
sql: |-
select ID,ID_1,…allcolumn from new_file
union
select ID,ID_1…allcolumn from prev_file where file_date <= rundate -100
write_file:
componentName: write_file
componentType: outputWriter
hadoopfileFormat: avro
numberofPartition: 1
outputDirectoryPath: <path of the file>
precedence:
selectstmt:
dependsOn:
prev_file: prev_file
new_file: new_file
write_file:
dependsOn:
selectstmt: selectstmt
Моему коду требуется более 1 часа, чтобы объединить данные и сгенерировать файл.
Не мог бы кто-нибудь, пожалуйста, подсказать мне, как настроить это так, чтобы это не занимало так много времени.