{
  "id": 5654,
  "title": "Code To read Train dataset in R",
  "url": "/competitions/facebook-recruiting-iii-keyword-extraction/discussion/5654",
  "author_name": "",
  "post_date": "2013-09-04T20:52:28.657Z",
  "votes": 4,
  "comment_count": 11,
  "views": 7136,
  "content": "<p>library(ff)</p>\n<p>train &lt;- read.csv.ffdf(file=&quot;Train.csv&quot;,header=TRUE,VERBOSE=TRUE,first.rows=10000,next.rows=10000,colClasses=NA)</p>\n<p>&nbsp;</p>\n<p>It took 37 min to read the file in R</p>\n<p>&nbsp;</p>",
  "messages": [
    {
      "id": "30188",
      "postDate": "09/04/2013 20:52:28",
      "content": "<p>library(ff)</p>\n<p>train &lt;- read.csv.ffdf(file=&quot;Train.csv&quot;,header=TRUE,VERBOSE=TRUE,first.rows=10000,next.rows=10000,colClasses=NA)</p>\n<p>&nbsp;</p>\n<p>It took 37 min to read the file in R</p>\n<p>&nbsp;</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "30525",
      "postDate": "09/09/2013 10:16:46",
      "content": "<p>There is no point of loading the entire dataset into R. You'll need some 16 GB RAM to perform the analysis. I'm also kind of confused in how to process the data since I have only 4GB RAM system. R is definitely not a good choice, may be RHadoop + AWS can be of some help. Still I'm not sure.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "30656",
      "postDate": "09/10/2013 14:19:01",
      "content": "<p>I wonder if there is a way in R to get a sample from the train data without loading the whole set into memory?</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "30659",
      "postDate": "09/10/2013 14:36:22",
      "content": "<p>[quote=Ishitori;30656]</p>\n<p>I wonder if there is a way in R to get a sample from the train data without loading the whole set into memory?</p>\n<p>[/quote]</p>\n<p>&nbsp;</p>\n<p>I think read.table command have option to do so. Just google it. If you can't find it let me know I will try and post the code.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "30660",
      "postDate": "09/10/2013 14:39:12",
      "content": "<p>Ok, will google it.&nbsp;</p>\n<p><span style=\"line-height: 1.4\">I wonder is sampling a commonly used approach nowadays, when everybody seems to be using Hadoop and other tools for working with Big data? Or people tend to just upload everything to HDFS and do even exploration stuff in clusters?</span></p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "30713",
      "postDate": "09/11/2013 02:22:24",
      "content": "<p>[quote=Ishitori;30660]</p>\n<p>Ok, will google it.&nbsp;</p>\n<p><span style=\"line-height: 1.4\">I wonder is sampling a commonly used approach nowadays, when everybody seems to be using Hadoop and other tools for working with Big data? Or people tend to just upload everything to HDFS and do even exploration stuff in clusters?</span></p>\n<p>[/quote]</p>\n<p>&nbsp;</p>\n<p>That's not 100% true. Although we have hadoop clusters running in the office but we can't use office resources for personal work that too for a job. In such situations AWS + RHadoop looks to me more useful.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "30723",
      "postDate": "09/11/2013 08:25:28",
      "content": "<p>The csv file is a text file. We can split the text file into smaller chunks (tail, less, split etc in linux and some splitter programs in windows). Then load one of the smaller file to see a view of the subset of data. Hope that helps!</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "30725",
      "postDate": "09/11/2013 09:17:50",
      "content": "<p>[quote=Ritesh Gupta;30723]</p>\n<p>The csv file is a text file. We can split the text file into smaller chunks (tail, less, split etc in linux and some splitter programs in windows). Then load one of the smaller file to see a view of the subset of data. Hope that helps!</p>\n<p>[/quote]</p>\n<p>To add to this, there was a discussion earlier about using shell commands. The data has newline characters which makes it slightly more complicated. Dmitrim has some <a href=\"https://www.kaggle.com/c/facebook-recruiting-iii-keyword-extraction/forums/t/5594/number-of-train-test-cases-nested-csv-issues/29857#post29857\">code</a> that cleans this problem. Once that is done, you could use something like:</p>\n<p>awk 'BEGIN { srand(systime()); } {if (rand() &lt; 0.25) { print $0; } }' Train.csv &gt; sampled_train.csv</p>\n<p>That should hopefully do the job.</p>\n<p>&nbsp;</p>\n<p>PS: The code above is rendering incorrectly. <a href=\"https://gist.github.com/rsivapr/6521274/raw/d361cc040080f495aec18db881c08971fbc6f48c/random_sample\">I have a copy here</a>.</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "30966",
      "postDate": "09/16/2013 11:44:26",
      "content": "<p>[quote=Ishitori;30656]</p>\n<p>I wonder if there is a way in R to get a sample from the train data without loading the whole set into memory?</p>\n<p>[/quote]</p>\n<p>ds &lt;- read.csv(...., nrows=2e4)<br>ds &lt;- rbind(ds, read.csv(...., skip=2e4, nrows=2e4))<br>ds &lt;- rbind(ds, read.csv(...., skip=4e4, nrows=2e4))<br>ds &lt;- rbind(ds, read.csv(...., skip=6e4))</p>\n<p>Hope this will help you to read data in chunks</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "31167",
      "postDate": "09/19/2013 10:04:24",
      "content": "<p>You can try with hadoop+mahout combinations to handle big file and also its scalable model.</p>\n<p>Thanks,</p>\n<p>Saravanan</p>\n<p>&nbsp;</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "32815",
      "postDate": "10/29/2013 07:05:06",
      "content": "<p>This was not meant to be optimized or simplified code since I needed something to work right away. The algorithm isn't efficient as it takes over 36 hours but if you're desperate for something to work right away, this should do the trick. At 500K lines, you'll end up with 291 files for the 6M+ records. &nbsp;If you're not comfortable with R, I suggest reading the other posts on postgres as that would probably be more efficient, but I'm a fan of R.</p>\n<p>segment&lt;-function()<br>{<br> train.file&lt;-file(&quot;Train.csv&quot;,open=&quot;r&quot;)<br> curr.block&lt;-readLines(train.file,n=500000, ok=TRUE)<br> curr.block&lt;-curr.block[-1] #delete first line<br> file.suffix&lt;-1<br> temp&lt;-1<br> while(length(curr.block)&gt;0)<br> {<br> <br> id.title.question.tags&lt;-data.frame(idnu=numeric(0),title=character(0),question=character(0),tags=character(0),stringsAsFactors=FALSE)<br> curr.row&lt;-0<br> start.line.curr.obs&lt;-0<br> curr.idnu&lt;-NA<br> curr.title&lt;-NA<br> curr.question&lt;-NA<br> curr.tags&lt;-NA<br> start.time&lt;-Sys.time()<br> #loop over lines<br> for(iter.line in curr.block)<br> {<br>output&lt;-grep('\\&quot;[0-9]+\\&quot;,',iter.line,value=TRUE)<br> #found start line of an observation/row<br> if(length(output)&gt;0) <br> {<br> <br> curr.row&lt;-curr.row+1<br> if(curr.row&gt;1)<br> {<br> #this means that all the lines for the previous obs (curr.row-1) are processed<br> #so start adding values to data frame<br> id.title.question.tags[curr.row-1,&quot;idnu&quot;]&lt;-as.numeric(curr.idnu)<br> id.title.question.tags[curr.row-1,&quot;title&quot;]&lt;-as.character(curr.title)<br> id.title.question.tags[curr.row-1,&quot;question&quot;]&lt;-as.character(curr.question)<br> id.title.question.tags[curr.row-1,&quot;tags&quot;]&lt;-as.character(curr.tags)<br> <br> curr.idnu&lt;-NA<br> curr.title&lt;-NA<br> curr.question&lt;-NA<br> curr.tags&lt;-NA<br> <br> curr.time&lt;-Sys.time()<br> elapsed.time&lt;-round(as.numeric(difftime(curr.time,start.time,units=&quot;mins&quot;)),digits=2)<br> print(paste(file.suffix,&quot; : &quot;,temp,&quot; : &quot;,elapsed.time,&quot; mins&quot;,sep=&quot;&quot;))<br> temp&lt;-temp+1<br> <br> <br> }<br> start.line.curr.obs &lt;- which(curr.block==iter.line)<br>split.line&lt;-strsplit(iter.line,split='\\&quot;,\\&quot;')[[1]]<br> #1st element should be idnu<br> #also remove the first quote<br> curr.idnu&lt;-sub('\\&quot;','',split.line[1])<br> #2nd element should be title<br> curr.title&lt;-split.line[2]<br> #3rd element is start of question, this can go through multiple lines<br> #which is why we need a while loop following this line<br> curr.question&lt;-split.line[3]<br> }<br> #so probably is a line of a multi-line question<br> #OR is the tag line<br> else<br> {<br> #check if a multi-line question or tag line<br> split.line&lt;-strsplit(iter.line,split='\\&quot;,\\&quot;')[[1]]<br> #this should be the tag line for the curr observation<br> if(length(split.line)==2)<br> {<br> #removing last leftover quote, these leftover quotes come from strsplit regex<br> curr.tags&lt;-sub('\\&quot;','',split.line[2])<br> }<br> else<br> {<br> #anything else needs to be added to multi-line<br> curr.question&lt;-paste(curr.question,iter.line,sep=&quot;&quot;)<br> }<br> <br> } <br> }<br> #need to process last observation<br> #no matter if all the fields are complete<br> if(!is.na(curr.tags))<br> {<br> id.title.question.tags[curr.row,&quot;idnu&quot;]&lt;-as.numeric(curr.idnu)<br> id.title.question.tags[curr.row,&quot;title&quot;]&lt;-as.character(curr.title)<br> id.title.question.tags[curr.row,&quot;question&quot;]&lt;-as.character(curr.question)<br> id.title.question.tags[curr.row,&quot;tags&quot;]&lt;-as.character(curr.tags)<br><br> }<br> else<br> {<br> #keep going to next line until tag line is reached<br> while(is.na(curr.tags))<br> {<br> iter.line&lt;-readLines(train.file,n=1, ok=TRUE) #read next line<br> #check if a multi-line question or tag line<br> split.line&lt;-strsplit(iter.line,split='\\&quot;,\\&quot;')[[1]]<br> #this should be the tag line for the curr observation<br> if(length(split.line)==2)<br> {<br> #removing last leftover quote, these leftover quotes come from strsplit regex<br> curr.tags&lt;-sub('\\&quot;','',split.line[2])<br> id.title.question.tags[curr.row,&quot;idnu&quot;]&lt;-as.numeric(curr.idnu)<br> id.title.question.tags[curr.row,&quot;title&quot;]&lt;-as.character(curr.title)<br> id.title.question.tags[curr.row,&quot;question&quot;]&lt;-as.character(curr.question)<br> id.title.question.tags[curr.row,&quot;tags&quot;]&lt;-as.character(curr.tags)</p>\n<p><br> }<br> else<br> {<br> #anything else needs to be added to multi-line<br> curr.question&lt;-paste(curr.question,iter.line,sep=&quot;&quot;)<br> }<br> <br> }<br> <br> }<br> filename&lt;-paste(&quot;train&quot;,file.suffix,sep=&quot;&quot;) <br> save(file=filename,id.title.question.tags)<br> curr.time&lt;-Sys.time()<br> elapsed.time&lt;-round(as.numeric(difftime(curr.time,start.time,units=&quot;mins&quot;)),digits=2)<br> print(paste(elapsed.time,&quot; mins&quot;,sep=&quot;&quot;))<br> rm(id.title.question.tags)<br> rm(curr.block)<br> curr.block&lt;-readLines(train.file,n=500000, ok=TRUE) #read next 500K<br> file.suffix&lt;-file.suffix+1<br> temp&lt;-1<br> }<br> close(train.file)<br> noquote(&quot;done&quot;)<br> id.title.question.tags<br> <br>}</p>",
      "rawMarkdown": "",
      "votes": null
    },
    {
      "id": "35114",
      "postDate": "11/24/2013 16:03:59",
      "content": "<p>I found it really difficult to get the data in R, even though I have 8GB RAM.&nbsp;</p>\n<p>Give a try to StatAce. It's a scalable R SaaS. Turned out to be useful in the actual training/prediction stage.</p>\n<p>&nbsp;</p>",
      "rawMarkdown": "",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 30525,
      "author_name": "ankitksharma",
      "author_url": "",
      "post_date": "09/09/2013 10:16:46",
      "content": "<p>There is no point of loading the entire dataset into R. You'll need some 16 GB RAM to perform the analysis. I'm also kind of confused in how to process the data since I have only 4GB RAM system. R is definitely not a good choice, may be RHadoop + AWS can be of some help. Still I'm not sure.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 30656,
      "author_name": "ishitori",
      "author_url": "",
      "post_date": "09/10/2013 14:19:01",
      "content": "<p>I wonder if there is a way in R to get a sample from the train data without loading the whole set into memory?</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 30659,
      "author_name": "thakurrajanand",
      "author_url": "",
      "post_date": "09/10/2013 14:36:22",
      "content": "<p>[quote=Ishitori;30656]</p>\n<p>I wonder if there is a way in R to get a sample from the train data without loading the whole set into memory?</p>\n<p>[/quote]</p>\n<p>&nbsp;</p>\n<p>I think read.table command have option to do so. Just google it. If you can't find it let me know I will try and post the code.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 30660,
      "author_name": "ishitori",
      "author_url": "",
      "post_date": "09/10/2013 14:39:12",
      "content": "<p>Ok, will google it.&nbsp;</p>\n<p><span style=\"line-height: 1.4\">I wonder is sampling a commonly used approach nowadays, when everybody seems to be using Hadoop and other tools for working with Big data? Or people tend to just upload everything to HDFS and do even exploration stuff in clusters?</span></p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 30713,
      "author_name": "ankitksharma",
      "author_url": "",
      "post_date": "09/11/2013 02:22:24",
      "content": "<p>[quote=Ishitori;30660]</p>\n<p>Ok, will google it.&nbsp;</p>\n<p><span style=\"line-height: 1.4\">I wonder is sampling a commonly used approach nowadays, when everybody seems to be using Hadoop and other tools for working with Big data? Or people tend to just upload everything to HDFS and do even exploration stuff in clusters?</span></p>\n<p>[/quote]</p>\n<p>&nbsp;</p>\n<p>That's not 100% true. Although we have hadoop clusters running in the office but we can't use office resources for personal work that too for a job. In such situations AWS + RHadoop looks to me more useful.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 30723,
      "author_name": "gritesh77",
      "author_url": "",
      "post_date": "09/11/2013 08:25:28",
      "content": "<p>The csv file is a text file. We can split the text file into smaller chunks (tail, less, split etc in linux and some splitter programs in windows). Then load one of the smaller file to see a view of the subset of data. Hope that helps!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 30725,
      "author_name": "rohits",
      "author_url": "",
      "post_date": "09/11/2013 09:17:50",
      "content": "<p>[quote=Ritesh Gupta;30723]</p>\n<p>The csv file is a text file. We can split the text file into smaller chunks (tail, less, split etc in linux and some splitter programs in windows). Then load one of the smaller file to see a view of the subset of data. Hope that helps!</p>\n<p>[/quote]</p>\n<p>To add to this, there was a discussion earlier about using shell commands. The data has newline characters which makes it slightly more complicated. Dmitrim has some <a href=\"https://www.kaggle.com/c/facebook-recruiting-iii-keyword-extraction/forums/t/5594/number-of-train-test-cases-nested-csv-issues/29857#post29857\">code</a> that cleans this problem. Once that is done, you could use something like:</p>\n<p>awk 'BEGIN { srand(systime()); } {if (rand() &lt; 0.25) { print $0; } }' Train.csv &gt; sampled_train.csv</p>\n<p>That should hopefully do the job.</p>\n<p>&nbsp;</p>\n<p>PS: The code above is rendering incorrectly. <a href=\"https://gist.github.com/rsivapr/6521274/raw/d361cc040080f495aec18db881c08971fbc6f48c/random_sample\">I have a copy here</a>.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 30966,
      "author_name": "parthibangowthaman",
      "author_url": "",
      "post_date": "09/16/2013 11:44:26",
      "content": "<p>[quote=Ishitori;30656]</p>\n<p>I wonder if there is a way in R to get a sample from the train data without loading the whole set into memory?</p>\n<p>[/quote]</p>\n<p>ds &lt;- read.csv(...., nrows=2e4)<br>ds &lt;- rbind(ds, read.csv(...., skip=2e4, nrows=2e4))<br>ds &lt;- rbind(ds, read.csv(...., skip=4e4, nrows=2e4))<br>ds &lt;- rbind(ds, read.csv(...., skip=6e4))</p>\n<p>Hope this will help you to read data in chunks</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 31167,
      "author_name": "saravanan2",
      "author_url": "",
      "post_date": "09/19/2013 10:04:24",
      "content": "<p>You can try with hadoop+mahout combinations to handle big file and also its scalable model.</p>\n<p>Thanks,</p>\n<p>Saravanan</p>\n<p>&nbsp;</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 32815,
      "author_name": "davidcho0",
      "author_url": "",
      "post_date": "10/29/2013 07:05:06",
      "content": "<p>This was not meant to be optimized or simplified code since I needed something to work right away. The algorithm isn't efficient as it takes over 36 hours but if you're desperate for something to work right away, this should do the trick. At 500K lines, you'll end up with 291 files for the 6M+ records. &nbsp;If you're not comfortable with R, I suggest reading the other posts on postgres as that would probably be more efficient, but I'm a fan of R.</p>\n<p>segment&lt;-function()<br>{<br> train.file&lt;-file(&quot;Train.csv&quot;,open=&quot;r&quot;)<br> curr.block&lt;-readLines(train.file,n=500000, ok=TRUE)<br> curr.block&lt;-curr.block[-1] #delete first line<br> file.suffix&lt;-1<br> temp&lt;-1<br> while(length(curr.block)&gt;0)<br> {<br> <br> id.title.question.tags&lt;-data.frame(idnu=numeric(0),title=character(0),question=character(0),tags=character(0),stringsAsFactors=FALSE)<br> curr.row&lt;-0<br> start.line.curr.obs&lt;-0<br> curr.idnu&lt;-NA<br> curr.title&lt;-NA<br> curr.question&lt;-NA<br> curr.tags&lt;-NA<br> start.time&lt;-Sys.time()<br> #loop over lines<br> for(iter.line in curr.block)<br> {<br>output&lt;-grep('\\&quot;[0-9]+\\&quot;,',iter.line,value=TRUE)<br> #found start line of an observation/row<br> if(length(output)&gt;0) <br> {<br> <br> curr.row&lt;-curr.row+1<br> if(curr.row&gt;1)<br> {<br> #this means that all the lines for the previous obs (curr.row-1) are processed<br> #so start adding values to data frame<br> id.title.question.tags[curr.row-1,&quot;idnu&quot;]&lt;-as.numeric(curr.idnu)<br> id.title.question.tags[curr.row-1,&quot;title&quot;]&lt;-as.character(curr.title)<br> id.title.question.tags[curr.row-1,&quot;question&quot;]&lt;-as.character(curr.question)<br> id.title.question.tags[curr.row-1,&quot;tags&quot;]&lt;-as.character(curr.tags)<br> <br> curr.idnu&lt;-NA<br> curr.title&lt;-NA<br> curr.question&lt;-NA<br> curr.tags&lt;-NA<br> <br> curr.time&lt;-Sys.time()<br> elapsed.time&lt;-round(as.numeric(difftime(curr.time,start.time,units=&quot;mins&quot;)),digits=2)<br> print(paste(file.suffix,&quot; : &quot;,temp,&quot; : &quot;,elapsed.time,&quot; mins&quot;,sep=&quot;&quot;))<br> temp&lt;-temp+1<br> <br> <br> }<br> start.line.curr.obs &lt;- which(curr.block==iter.line)<br>split.line&lt;-strsplit(iter.line,split='\\&quot;,\\&quot;')[[1]]<br> #1st element should be idnu<br> #also remove the first quote<br> curr.idnu&lt;-sub('\\&quot;','',split.line[1])<br> #2nd element should be title<br> curr.title&lt;-split.line[2]<br> #3rd element is start of question, this can go through multiple lines<br> #which is why we need a while loop following this line<br> curr.question&lt;-split.line[3]<br> }<br> #so probably is a line of a multi-line question<br> #OR is the tag line<br> else<br> {<br> #check if a multi-line question or tag line<br> split.line&lt;-strsplit(iter.line,split='\\&quot;,\\&quot;')[[1]]<br> #this should be the tag line for the curr observation<br> if(length(split.line)==2)<br> {<br> #removing last leftover quote, these leftover quotes come from strsplit regex<br> curr.tags&lt;-sub('\\&quot;','',split.line[2])<br> }<br> else<br> {<br> #anything else needs to be added to multi-line<br> curr.question&lt;-paste(curr.question,iter.line,sep=&quot;&quot;)<br> }<br> <br> } <br> }<br> #need to process last observation<br> #no matter if all the fields are complete<br> if(!is.na(curr.tags))<br> {<br> id.title.question.tags[curr.row,&quot;idnu&quot;]&lt;-as.numeric(curr.idnu)<br> id.title.question.tags[curr.row,&quot;title&quot;]&lt;-as.character(curr.title)<br> id.title.question.tags[curr.row,&quot;question&quot;]&lt;-as.character(curr.question)<br> id.title.question.tags[curr.row,&quot;tags&quot;]&lt;-as.character(curr.tags)<br><br> }<br> else<br> {<br> #keep going to next line until tag line is reached<br> while(is.na(curr.tags))<br> {<br> iter.line&lt;-readLines(train.file,n=1, ok=TRUE) #read next line<br> #check if a multi-line question or tag line<br> split.line&lt;-strsplit(iter.line,split='\\&quot;,\\&quot;')[[1]]<br> #this should be the tag line for the curr observation<br> if(length(split.line)==2)<br> {<br> #removing last leftover quote, these leftover quotes come from strsplit regex<br> curr.tags&lt;-sub('\\&quot;','',split.line[2])<br> id.title.question.tags[curr.row,&quot;idnu&quot;]&lt;-as.numeric(curr.idnu)<br> id.title.question.tags[curr.row,&quot;title&quot;]&lt;-as.character(curr.title)<br> id.title.question.tags[curr.row,&quot;question&quot;]&lt;-as.character(curr.question)<br> id.title.question.tags[curr.row,&quot;tags&quot;]&lt;-as.character(curr.tags)</p>\n<p><br> }<br> else<br> {<br> #anything else needs to be added to multi-line<br> curr.question&lt;-paste(curr.question,iter.line,sep=&quot;&quot;)<br> }<br> <br> }<br> <br> }<br> filename&lt;-paste(&quot;train&quot;,file.suffix,sep=&quot;&quot;) <br> save(file=filename,id.title.question.tags)<br> curr.time&lt;-Sys.time()<br> elapsed.time&lt;-round(as.numeric(difftime(curr.time,start.time,units=&quot;mins&quot;)),digits=2)<br> print(paste(elapsed.time,&quot; mins&quot;,sep=&quot;&quot;))<br> rm(id.title.question.tags)<br> rm(curr.block)<br> curr.block&lt;-readLines(train.file,n=500000, ok=TRUE) #read next 500K<br> file.suffix&lt;-file.suffix+1<br> temp&lt;-1<br> }<br> close(train.file)<br> noquote(&quot;done&quot;)<br> id.title.question.tags<br> <br>}</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 35114,
      "author_name": "todorkazakov",
      "author_url": "",
      "post_date": "11/24/2013 16:03:59",
      "content": "<p>I found it really difficult to get the data in R, even though I have 8GB RAM.&nbsp;</p>\n<p>Give a try to StatAce. It's a scalable R SaaS. Turned out to be useful in the actual training/prediction stage.</p>\n<p>&nbsp;</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "30188": "",
    "30525": "",
    "30656": "",
    "30659": "",
    "30660": "",
    "30713": "",
    "30723": "",
    "30725": "",
    "30966": "",
    "31167": "",
    "32815": "",
    "35114": ""
  },
  "source": "meta"
}