Как использовать параллельные вычисления в R? - PullRequest
0 голосов
/ 19 марта 2020
    sect<-c("Healthcare","Basic Materials","Utilities","Financial Services","Technology","Consumer" 
    "Defensive","Industrials","Communication Services","Energy","Real Estate","Consumer 
    Cyclical","NULL")

    mcap<-c("3 - Large","2 - Mid","1 - Small")

    df_total = data.frame()
    start <- as.Date("01-01-14",format="%d-%m-%y")
    end   <- as.Date("18-03-20",format="%d-%m-%y")
    theDate <- start

    while (theDate <= end){
      for (value1 in sect){
        for (value2 in mcap){
            date=theDate
            sector<-value1
            marketcap1<-value2
            newquery("Select * from table where date='%s' and sector='%s' and marketcap='%s'",date,sector,marketcap1)
   topdemo <- sqlQuery(dbhandle,newquery)
   df=data.frame(topdemo)
   df_total <- rbind(df_total,df)

     }
    }
   theDate <- theDate + 1 
   }

Вместо запроса "Выбрать" в моей программе я делаю несколько SQL вычислений. Мне нужно, чтобы этот код работал с 2014 по 2020 год, но его выполнение занимает много времени. Есть ли способ уменьшить время выполнения? База данных имеет много цен на акции для каждой рыночной капитализации и сектора.

1 Ответ

1 голос
/ 19 марта 2020

Выполните один запрос вместо всех циклов:

select *
from table
where sector in ('Healthcare', 'Basic Materials', 'Utilities',
                 'Financial Services', 'Technology', 'Consumer' 
                 'Defensive', 'Industrials', 'Communication Services', 'Energy', 'Real Estate', 'Consumer Cyclical', 'NULL'
                 ) and
        marketcap in ('3 - Large', '2 - Mid', '1 - Small') and
        date between '2014-01-01 and '2020-03-18';

Существует много накладных расходов при выполнении большого количества небольших запросов, обычно один лучше.

Тем не менее, кажется, вы перемещать много данных. Интересно, нужно ли все это перемещение данных.

Странно, что вы просматриваете тысячи дат, но не включаете дату в запрос.

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