Как кешировать таблицу в потоковой передаче - PullRequest
0 голосов
/ 09 мая 2019

Я должен соединить 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 ГБ (прикреплен искровой интерфейс).

enter image description here

Что я не понимаю, так это то, что вся память (5,3 ГБ) и дополнительный диск объемом 2,8 ГБ используются для кэширования 2,9 ГБ файла.

Не могли бы вы дать мне знать, что именно происходит, когда мы делаем кеш.Почему почти 3 раза используется ОЗУ.Это потому, что мой формат файла - паркет, а файл взорван при чтении в память?Я попытался создать текстовый файл из этого, просто чтобы узнать размер файла.Размер текстового файла был около 21 ГБ.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...