У меня есть 2.92M точки данных в CSV-файле 3.0GB, и мне нужно пропустить его дважды, чтобы создать график, который я хочу загрузить в NetworkX. По текущему курсу мне понадобится несколько дней, чтобы создать этот график. Как я могу ускорить это?Ускорить создание графика из 2.92M точек данных
similarity = 8
graph = {}
topic_pages = {}
CSV.foreach("topic_page_node_and_edge.csv") do |row|
topic_pages[row[0]] = row[1..-1]
end
CSV.open("generate_graph.csv", "wb") do |csv|
i = 0
topic_pages.each do |row|
i+=1
row = row.flatten
topic_pages_attributes = row[1..-1]
graph[row[0]] = []
topic_pages.to_a[i..-1].each do |row2|
row2 = row2.flatten
topic_pages_attributes2 = row2[1..-1]
num_matching_attributes = (topic_pages_attributes2 & topic_pages_attributes).count
if num_matching_attributes >= similarity or num_matching_attributes == topic_pages_attributes2.count or num_matching_attributes == topic_pages_attributes.count
graph[row[0]].push(row2[0])
end
end
csv << [row[0], graph[row[0]]].flatten
end
end
Показывая нам свой код? –
@theTinMan добавил код. Благодарю. –
Сколько у вас RAM на этой машине? Вы пытаетесь удерживать в памяти 2.92M точки данных, и каждая точка * не * принимает один байт. –