Я должен соединить 2 источника со своими данными потоковой передачи.Эти 2 источника будут обновляться один раз в месяц, что означает, что данные для этих источников будут меняться только один раз в месяц.
Итак, я подумал о создании таблицы из фрейма данных для этих источников и последующем ее кэшировании.,И разархивируйте таблицу перед обновлением в следующем месяце.
spark.catalog.cacheTable
spark.catalog.uncacheTable
Не могли бы вы сообщить мне, если это правильный подход.Моя версия спарк-версии 2.4
Ниже приведен псевдокод
private void loadData() {
//Read Customer data. This should be refreshed once is a month.
DataSet<Row> cutomerData = SparkOperationUtils.loadDataSouce(spark, <path of the data>, <table name that has to be created after reading>);
spark.catalog().cacheTable(cutomerData)
}
public void initJob() {
....
loadDaata();
nextRefershedDate = getNextRefreshedDate(); // this will be in milliseconds
}
private void enhanceStay(string folderName) throws Exception {
String staySourcePath = folderName + prefix;
String outputPath = outputHdfsPrefix + separator + folderName;
DataSet<Row> realtimeDataSource =
SparkOperationUtils.loadDataSouce(spark, staySourcePath, sourceDataTable); // loadDataSouce method accepts spark, path of the data that it has to read, and the table it has to create from the data
if (nexRefreshedDate < currentDate) {
spark.catalog().uncacheTable(cutomerData)
loadDaata();
nextRefershedDate = getNextRefreshedDate(); // this will be in milliseconds
}
DataSet<Row> realtimeDataSourceDF = .. //join the 2 tables from sourceDataTable and cutomerData
.....
}
РЕДАКТИРОВАТЬ
Я пытаюсь кэшировать файл в spark-shell.Размер моего входного файла составляет 2,9 ГБ, а память драйвера для spark-shell - 10 ГБ.Я пытался кэшировать файл.Хотя при запуске спарк-оболочки упоминается 10G, для драйвера выделяется только 5,5 ГБ (прикреплен искровой интерфейс).
Что я не понимаю, так это то, что вся память (5,3 ГБ) и дополнительный диск объемом 2,8 ГБ используются для кэширования 2,9 ГБ файла.
Не могли бы вы дать мне знать, что именно происходит, когда мы делаем кеш.Почему почти 3 раза используется ОЗУ.Это потому, что мой формат файла - паркет, а файл взорван при чтении в память?Я попытался создать текстовый файл из этого, просто чтобы узнать размер файла.Размер текстового файла был около 21 ГБ.
Спасибо