R-高性能Amazon EC2比i7慢?

R-高性能Amazon EC2比i7慢?,r,amazon-ec2,R,Amazon Ec2,我正在处理一个大型数据集,并试图将其卸载到AmazonEC2以加快处理速度 数据以两个表开始-6.5M x 6和11K x 15。然后我将它们合并到一个6.5M x 20的表格中 这是我的R代码: library(data.table) library(dplyr) download.file("http://d396qusza40orc.cloudfront.net/exdata%2Fdata%2FNEI_data.zip", "data.zip") unzip("data.zip")

我正在处理一个大型数据集,并试图将其卸载到AmazonEC2以加快处理速度

数据以两个表开始-6.5M x 6和11K x 15。然后我将它们合并到一个6.5M x 20的表格中

这是我的R代码:

library(data.table)
library(dplyr)

download.file("http://d396qusza40orc.cloudfront.net/exdata%2Fdata%2FNEI_data.zip", "data.zip")

unzip("data.zip")

data <- readRDS("summarySCC_PM25.rds")
scckey <- readRDS("Source_Classification_Code.rds")

system.time(data <- data %>% inner_join(scckey))
在Amazon EC2 c4.8XL上(36 vCPU、132 EPU、60GB RAM、EBS存储)

在Amazon EC2 c3.8大型(32 vCPU、108 EPU、60GB RAM、SSD存储)上

怎么可能两个EC2系统都比我自己的笔记本电脑慢呢?尤其是c4.8large似乎是亚马逊提供的最强大的计算解决方案

我做错什么了吗

编辑:

我已经检查了监控系统-看起来连接正在以3-5%的CPU使用率运行。这似乎很低——在我的笔记本电脑上,它运行在30-40%左右

编辑:

根据建议,我尝试了
data.table
merge()

3.8x1%的CPU利用率:

system.time(datamerge <- merge(data, scckey, by = "SCC"))
   user  system elapsed 
193.012   0.658 193.654
system.time(datamerge <- merge(data, scckey, by = "SCC"))
   user  system elapsed 
162.829   0.822 163.638 

system.time(datamerge我不是AmazonEC2的专家,但它可能使用商品服务器作为基础硬件平台在此上下文中,指x86 CPU,其基本架构与笔记本电脑相同。根据笔记本电脑的功能,它甚至可能比EC2实例中的内核具有更高的时钟速度


EC2带给您的是可伸缩性,这意味着比本地拥有更多的内核和内存。但您的代码必须编写以利用这些内核;这意味着它必须在执行中并行化。我非常确定
数据。table
与几乎所有的R包一样是单线程的,因此获取更多的内核本身并不能使事情更快。另外,如果您的数据已经存储在内存中,那么获取更多不会产生显著的收益。

不相关,但是如果您已经使用了
data.table
为什么不使用它的二进制连接功能呢?它是专为大数据连接而设计的。对不起,我对R还是新手-您是指
merge()
数据表中的函数
?如果没有,你能给我一个例子吗?不,看一看一些例子W。你知道当合并130M数据点时,函数的效率是运行
视图()的13倍
。谢谢您的帮助。@Chris使用ec2进行数据处理的最大好处是当您的工作负载需要比本地计算机更多的内存时,或者它可以拆分并在多个核心/实例上运行。否则,与裸机相比,虚拟化税将降低单核心性能。我不是我也不是R方面的专家,但从我对提供internal_join()的dplyr的了解来看,大多数过程都是并行完成的。例如@Chris,我认为这是一个错误,dplyr中还没有实现并行,尽管它还在工作中。
   user  system elapsed 
374.839   0.367 375.178
system.time(datamerge <- merge(data, scckey, by = "SCC"))
   user  system elapsed 
193.012   0.658 193.654
system.time(datamerge <- merge(data, scckey, by = "SCC"))
   user  system elapsed 
162.829   0.822 163.638 
system.time(datamerge <- merge(data, scckey, by = "SCC"))
   user  system elapsed 
133.45    1.34  135.81