我有2个csv如下(试图通过pandas读取它们)df1文件是17GB(我通过pandas read_csv读取它),df2是700mb,我想使用trig_seq
进行合并。但是python被杀了。有没有办法通过awk / join
>>> df1.head()
StreamId SeqNum Timestamp_p1 trig_seq
1 1 14914503 10000000001
1 2 1491450 10000000002
1 3 1491450 10000000003
1 4 1491450 10000000004
1 5 149145 10000000005
>>> df2= pd.read_csv("/tmp/my.csv")
>>> df2.head()
model_id order ctime trig_seq
e62 1000000 1493311414272 30021182183
e62 1000001 149199641344 30021210134
e22 1000002 1491081210880 30021227875
e62 1000003 14951949824 30021239627
e62 1000004 14927136256 30021241522
>>> r1 = pd.merge(df1,df2)
Killed
答案 0 :(得分:0)
试试这个 -
$ cat f1
1 1 14914503 10000000001
1 2 1491450 10000000002
1 3 1491450 10000000003
1 4 1491450 10000000004
1 5 149145 10000000005
$ cat f2
e62 1000000 1493311414272 30021182183
e62 1000001 149199641344 30021210134
e22 1000002 1491081210880 30021227875
e62 1000003 14951949824 30021239627
e62 1000004 14927136256 30021241522
$ awk 'NR==FNR{a[NR]=$0;next} $2 in a {print $0,a[$1]}' f2 f1|column -t
1 1 14914503 10000000001 e62 1000000 1493311414272 30021182183
1 2 1491450 10000000002 e62 1000000 1493311414272 30021182183
1 3 1491450 10000000003 e62 1000000 1493311414272 30021182183
1 4 1491450 10000000004 e62 1000000 1493311414272 30021182183
1 5 149145 10000000005 e62 1000000 1493311414272 30021182183
答案 1 :(得分:0)
basicaly
awk 'FNR=NR{T[$4]=$3;next}{print $0 OFS T[$2]}' f1 f2 > New.f2
如果出现内存问题,请尝试加载仅需要的时间戳但读取两次f2
awk 'FNR==1 { f++ }
f==1 { T[$2]; next }
f==2 && ($4 in T) { T[$4]=$3; next }
{ print $0 OFS t[$2] }
' f2 f1 f2 > New.f2