0

RMySQL()R から MySQL データベースにデータを送信するために使用しています。問題は、データベースがデータを受信しないことです....私はdoParallel()4500回以上の反復を実行しているので使用しています....関数でデータベースにデータを送信しようとしている可能性がありpullSpread()ますか?

library(RMySQL)
library(doParallel)
library(stringr)
library(foreach)

makeCluster(detectCores()) # ANSWER = 4
cl <- makeCluster(4, type="SOCK") # also used PSOCK & FORK but receive the same problem
registerDoParrallel(cl)

# Now use foreach() and %dopar% to pull data...
# the apply(t(stock1), 2, pullSpread) works but not "parallelized"
# I have also used clusterApply() but is unsuccessful
system.time(
foreach(a=t(stock1)) %dopar% pullSpread(a)
)

作業ディレクトリを見ると、すべてのファイルが正常にファイルにコピーされてい.csvますが、MySQL ワークベンチをチェックしたり、R からファイルを呼び出したりしても、存在しません...

stock1()使用される文字ベクトルとpullSpread()関数は次 のとおりです...

# This list contains more than 4500 iterations.. so I am only posting a few
stock1<-c(
  "SGMS.O","SGNL.O","SGNT.O",
  "SGOC.O","SGRP.O", ...) 

機能に必要な重要な日付:

Friday <- Sys.Date()-10

# Get Previous 5 days
Thursday <- Friday - 1
Wednesday <- Thursday -1
Tuesday <- Wednesday -1
Monday <- Tuesday -1

#Make Them readable for NetFonds 
Friday <- format(Friday, "%Y%m%d")
Thursday<- format(Thursday, "%Y%m%d")
Wednesday<- format(Wednesday, "%Y%m%d")
Tuesday<- format(Tuesday, "%Y%m%d")
Monday<-format(Monday, "%Y%m%d")

pullSpread()関数は次のとおりです。

pullSpread = function (stock1){
AAPL_FRI<- read.delim(header=TRUE, stringsAsFactor=FALSE,
                    paste(sep="",
                          "http://www.netfonds.no/quotes/posdump.php?date=",
                          Friday,"&paper=",stock1,"&csv_format=txt"))

tryit <- try(AAPL_FRI[,c(1:7)])

if(inherits(tryit, "try-error")){

rm(AAPL_FRI)

} else {



AAPL_THURS<- read.delim(header=TRUE, stringsAsFactor=FALSE,
                      paste(sep="",
                            "http://www.netfonds.no/quotes/posdump.php?date=",
                            Thursday,"&paper=",stock1,"&csv_format=txt"))

AAPL_WED<- read.delim(header=TRUE, stringsAsFactor=FALSE,
                    paste(sep="",
                          "http://www.netfonds.no/quotes/posdump.php?date=",
                          Wednesday,"&paper=",stock1,"&csv_format=txt"))

AAPL_TUES<- read.delim(header=TRUE, stringsAsFactor=FALSE,
                     paste(sep="",
                           "http://www.netfonds.no/quotes/posdump.php?date=",
                           Tuesday,"&paper=",stock1,"&csv_format=txt"))

AAPL_MON<- read.delim(header=TRUE, stringsAsFactor=FALSE,
                    paste(sep="",
                          "http://www.netfonds.no/quotes/posdump.php?date=",
                          Monday,"&paper=",stock1,"&csv_format=txt"))


SERIES <- rbind(AAPL_MON,AAPL_TUES,AAPL_WED,AAPL_THURS,AAPL_FRI)

#Write .CSV File
write.csv(SERIES,paste(sep="",stock1,"_",Friday,".csv"), row.names=FALSE) 
dbWriteTable(con2,paste0( "",str_sub(stock1, start = 1L, end = -3L),""),paste0(   
"~/Desktop/R/",stock1,"_",Friday,".csv"), append=T)
}
}
4

1 に答える 1

2

次のようなものを使用して、先週の金曜日に取得します。

Friday <- Sys.Date()
while(weekdays(Friday) != "Friday") 
{
  Friday <- Friday - 1
}

インターネットからデータを取得するときは、データをダウンロードする行為と処理する行為を分離することをお勧めします。そうすれば、処理が失敗したときに、時間と帯域幅を再ダウンロードして無駄にすることはありません。

lastWeek <- format(Friday - 0:4, "%Y%m%d")
stockDatePairs <- expand.grid(Stock = stock1, Date = lastWeek)
urls <- with(
  stockDatePairs,
  paste0(
    "http://www.netfonds.no/quotes/posdump.php?date=",
    Date,
    "&paper=",
    Stock,
    "&csv_format=txt"
  )
)
for(url in urls)
{
  # or whatever file name you want
  download.file(url, paste0("data from ", make.names(url), ".txt"))
}

これらのファイルが保存されているディレクトリを確認してください。(絶対パスを指定するか、作業ディレクトリを設定してください。)

これらのファイルを読み込んでみてくださいrbind

それが機能する場合は、並列処理を試すことができます。

また、多くのオンライン データ サービスでは、サービスの料金を支払っていない限り、ダウンロードできる速度が制限されていることに注意してください。したがって、並列ダウンロードは、制限に早く到達することを意味する場合があります.

于 2014-07-14T12:53:59.390 に答える