由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
DataSciences版 - 在R里merge两个dataframe太慢了
相关主题
Memory Error in pandas.concat with Pythonbig set intersection in pig
Project :advertersiment click prediction我现在有一个15个variable的回归模型。 有什么系统性的方法去
求助 信息提取 (转载)请教问题 R list of list to vector to data frame
random forest 有没有可能保证某几个变量一直被选上PCA 可以用在mixture of continuous 和categorical variables (转载)
Spark开始使用DataFrame几个星期前看到一个3000 feature 的选重要variable的面试帖子,
问一道(大)数据 algorithm (转载)有没有大牛来classifiy一下 PCA用法吗?
如何改变spark dataframe的column names请教大家一个做feature的问题
spark上一两个million的时间序列数据怎么处理categorical variable有很多个level的
相关话题的讨论汇总
话题: merge话题: long话题: rnorm话题: dataframe话题: elapsed
进入DataSciences版参与讨论
1 (共1页)
g*r
发帖数: 67
1
R的merge效率太低了。根据一个列合并两个dataframe,长的有1m行,短的1k行:
long =data.frame(a=seq(1,1000000), b=rnorm(10) )
short=data.frame(a=seq(1,2000, 2), c=rnorm(10) )
system.time(merge(x=long, y=short, all.x=T))
user system elapsed
10.286 0.370 10.624
4m行就要将近1分钟。8m行超过2分钟。16m要4分钟。
我的真实数据比例子里的复杂些,且有100m行或更高,卡了半天没动静,只好强行终止
进程。对这个效率有点失望。早听说merge很慢,这次领教了。
如果不依靠外部程序(shell,python之类的script),大家是怎么多快好省做合并的
呢?菜鸟一个,轻拍。
x******m
发帖数: 736
2
这个没办法,R就是慢。R在出来table的时候,后台会有很多enviromental variables
,所以会很慢。况且你是100m row的data,也不小了,好奇你是怎么读到R里面的?
既然都会R了,就试试python吧,很简单的,几行就能搞定。
z*****i
发帖数: 366
3
http://stackoverflow.com/questions/11146967/efficient-alternati

【在 g*r 的大作中提到】
: R的merge效率太低了。根据一个列合并两个dataframe,长的有1m行,短的1k行:
: long =data.frame(a=seq(1,1000000), b=rnorm(10) )
: short=data.frame(a=seq(1,2000, 2), c=rnorm(10) )
: system.time(merge(x=long, y=short, all.x=T))
: user system elapsed
: 10.286 0.370 10.624
: 4m行就要将近1分钟。8m行超过2分钟。16m要4分钟。
: 我的真实数据比例子里的复杂些,且有100m行或更高,卡了半天没动静,只好强行终止
: 进程。对这个效率有点失望。早听说merge很慢,这次领教了。
: 如果不依靠外部程序(shell,python之类的script),大家是怎么多快好省做合并的

i********t
发帖数: 809
4
不是都该用data.table了吗。。。
S******y
发帖数: 1123
5
Python is the way to go
You can load your smaller file into a dictionary first...
g*r
发帖数: 67
6
长的数据100m行不是读入,而是在R里面生成的。
短的数据才是从外部文件导入的。
想把两者合并。

variables

【在 x******m 的大作中提到】
: 这个没办法,R就是慢。R在出来table的时候,后台会有很多enviromental variables
: ,所以会很慢。况且你是100m row的data,也不小了,好奇你是怎么读到R里面的?
: 既然都会R了,就试试python吧,很简单的,几行就能搞定。

B*O
发帖数: 105
7
用match比较快。
> long =data.frame(a=seq(1,1000000), b=rnorm(10) )
> short=data.frame(a=seq(1,2000, 2), c=rnorm(10) )
> system.time(merge(x=long, y=short, all.x=T))
user system elapsed
7.253 0.071 7.385
> system.time(long$c<-rep(as.numeric(NA),dim(long)[1]))
user system elapsed
0.002 0.000 0.001
> system.time(long$c[match(short$a,long$a)]<-short$c)
user system elapsed
0.119 0.000 0.119
g*r
发帖数: 67
8
出于力求“简单统一”的考虑,不想调用其他程序。(比如换到windows下跑,就需要
先安装python了)
试了一下大家的另外两个建议。
data.table是个好东西,瞬间完成!match稍慢,但可以接受。
s*********e
发帖数: 1051
9
try sqldf with index. there is no overhead for data table conversion.

【在 g*r 的大作中提到】
: 出于力求“简单统一”的考虑,不想调用其他程序。(比如换到windows下跑,就需要
: 先安装python了)
: 试了一下大家的另外两个建议。
: data.table是个好东西,瞬间完成!match稍慢,但可以接受。

r********n
发帖数: 7441
10
这种简单查找型 merg 显然是用 awk 比较快了

【在 g*r 的大作中提到】
: R的merge效率太低了。根据一个列合并两个dataframe,长的有1m行,短的1k行:
: long =data.frame(a=seq(1,1000000), b=rnorm(10) )
: short=data.frame(a=seq(1,2000, 2), c=rnorm(10) )
: system.time(merge(x=long, y=short, all.x=T))
: user system elapsed
: 10.286 0.370 10.624
: 4m行就要将近1分钟。8m行超过2分钟。16m要4分钟。
: 我的真实数据比例子里的复杂些,且有100m行或更高,卡了半天没动静,只好强行终止
: 进程。对这个效率有点失望。早听说merge很慢,这次领教了。
: 如果不依靠外部程序(shell,python之类的script),大家是怎么多快好省做合并的

o**a
发帖数: 1315
11
进来学习
1 (共1页)
进入DataSciences版参与讨论
相关主题
怎么处理categorical variable有很多个level的Spark开始使用DataFrame
求教linear regression的一道面试题问一道(大)数据 algorithm (转载)
请教一个用R做cox regression的问题如何改变spark dataframe的column names
紧急求救: SMOTE-NC 处理categorical data for unbalanced class!!!spark上一两个million的时间序列数据
Memory Error in pandas.concat with Pythonbig set intersection in pig
Project :advertersiment click prediction我现在有一个15个variable的回归模型。 有什么系统性的方法去
求助 信息提取 (转载)请教问题 R list of list to vector to data frame
random forest 有没有可能保证某几个变量一直被选上PCA 可以用在mixture of continuous 和categorical variables (转载)
相关话题的讨论汇总
话题: merge话题: long话题: rnorm话题: dataframe话题: elapsed