有兩個千萬級別的資料,都有兩列,一列標簽,另一列資料。希望將兩個資料中,同一個標簽的數量如果不同,將其單獨列出來?
用不同方式,處理都非常慢,可能是用法不對。有沒有更好或更快的方式。
1.資料格式如下
e39aa0582fb3d25b42a77fb9cb09472d 99
2.直接用mysql查詢,運行一天沒有反應。
SELECT m1.tag, m1.value,s2.value
FROM main m1 LEFT JOIN sub s2
on m1.tag = s2.tag
where m1.value <> s2.value;
3.用shell處理非常慢。資料是資料表匯出到兩個文本檔案
#!/bin/bash
while read line
do
NS1=`echo $line | awk '{print $1}'`
NS2=`echo $line | awk '{print $NF}'`
NS3=`grep $NS1 main.csv | awk '{print $NF}'`
if [ $NS2 != $NS3 ]
then
echo "MSGID=$NS1 SUBSEQ=$NS2 COUNT=$NS3" >> o1.out
fi
echo "MSGID=$NS1"
done < sub.csv
4.用python處理非常慢
import re
import os
mainfilename = 'main.csv'
subfilename = 'sub.csv'
mainfile = open(mainfilename,'r')
def search1(searchstr,var1):
for mcontent in mainfile.readlines():
m = re.findall(searchstr,mcontent)
if m:
print("__",m,"_")
subfile=open(subfilename,"r")
contents=subfile.readlines()
for content in contents:
tag = content.split('\t')[0].replace(" ", "")
value = content.split('\t')[1].replace(" ", "")
search1(tag,value)
uj5u.com熱心網友回復:
你這樣做復雜度高到天上去了. 很容易想到兩種方法, 1. 將兩個資料分別排序, 然后再比較. 2. 將兩個資料分別哈希成字典, 然后查詢. 第二種方法代碼簡單一些, 幾行就搞定了.轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/243687.html
上一篇:C語言轉為Java
下一篇:Python
