前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Java数据处理]4GB文本文件处理一例

[Java数据处理]4GB文本文件处理一例

作者头像
陈黎栋
发布2020-02-18 09:50:44
4760
发布2020-02-18 09:50:44
举报

问题模型:

4GB文本文件in.triple每行包含两个顶点,一个边 : node1String, edgeString,node2String。输出node.csv文件:node1Id,edgeString,node2Id。

in.triple的文件格式

<http://wikidata.dbpedia.org/resource/Q20> <http://dbpedia.org/ontology/description> "land i Nord-Europa"@nb . <http://wikidata.dbpedia.org/resource/Q20> <http://dbpedia.org/ontology/description> "land i Nord-Europa"@nn . <http://wikidata.dbpedia.org/resource/Q20> <http://dbpedia.org/ontology/description> "valtio Pohjois-Euroopassa"@fi . <http://wikidata.dbpedia.org/resource/Q20> <http://dbpedia.org/ontology/description> "pagilian idiay Amianan nga Europa"@tl . <http://wikidata.dbpedia.org/resource/Q20> <http://dbpedia.org/ontology/description> "civitas Europae"@la .

<http://wikidata.dbpedia.org/resource/Q20> <http://dbpedia.org/ontology/description> "ஐரோப்பிய நாடு"@ta .

<http://wikidata.dbpedia.org/resource/Q20> <http://dbpedia.org/ontology/description> "کشوری در اروپا"@fa . <http://wikidata.dbpedia.org/resource/Q20> <http://dbpedia.org/ontology/description> "სახელმწიფო ჩრდილოეთ ევროპაში, სკანდინავიის ნახევარკუნძულზე"@ka . <http://wikidata.dbpedia.org/resource/Q17> <http://dbpedia.org/ontology/description> "land i Øst-Asia"@nb . <http://wikidata.dbpedia.org/resource/Q17> <http://dbpedia.org/ontology/description> "valtio Aasiassa"@fi . <http://wikidata.dbpedia.org/resource/Q17> <http://dbpedia.org/ontology/description> "isla a pagilian idiay Daya nga Asia"@tl . <http://wikidata.dbpedia.org/resource/Q17> <http://dbpedia.org/ontology/description> "מדינה"@he . <http://wikidata.dbpedia.org/resource/Q17> <http://dbpedia.org/ontology/description> "கிழக்காசிய நாடு"@ta . <http://wikidata.dbpedia.org/resource/Q17> <http://dbpedia.org/ontology/description> "valsts austrumu Āzijā"@lv . <http://wikidata.dbpedia.org/resource/Q17> <http://dbpedia.org/ontology/description> "østasiatisk østat"@da . <http://wikidata.dbpedia.org/resource/Q17> <http://dbpedia.org/ontology/description> "کشوری در جنوب خاوری آسیا"@fa . <http://wikidata.dbpedia.org/resource/Q17> <http://dbpedia.org/ontology/description> "quốc đảo ở Đông Á"@vi . <http://wikidata.dbpedia.org/resource/Q17> <http://dbpedia.org/ontology/description> "জাপান এচিয়া মহাদেশত স্হিত এখন দেশ৷জাপান চাৰিটা ডাঙৰ আৰ্ৱো ানেক সৰ্ দ্বীপৰ সমস্টী৷"@as . <http://wikidata.dbpedia.org/resource/Q18> <http://dbpedia.org/ontology/description> "kontinent"@nb . <http://wikidata.dbpedia.org/resource/Q18> <http://dbpedia.org/ontology/description> "maanosa"@fi . <http://wikidata.dbpedia.org/resource/Q18> <http://dbpedia.org/ontology/description> "kontinente"@tl . <http://wikidata.dbpedia.org/resource/Q18> <http://dbpedia.org/ontology/description> "கண்டம்"@ta .

node.csv文件格式

1,<http://wikidata.dbpedia.org/resource/Q20> 2,<http://dbpedia.org/ontology/description> 3,<http://wikidata.dbpedia.org/resource/Q17> 4,<http://wikidata.dbpedia.org/resource/Q18> 5,<http://wikidata.dbpedia.org/resource/Q15> 6,<http://wikidata.dbpedia.org/resource/Q26> 7,<http://wikidata.dbpedia.org/resource/Q21> 8,<http://wikidata.dbpedia.org/resource/Q22> 9,<http://wikidata.dbpedia.org/resource/Q27>

edge.csv格式

1,2,"land 1,2,"land 1,2,"valtio 1,2,"pagilian 1,2,"civitas 1,2,"ஐரோப்பிய 1,2,"land 1,2,"کشوری 1,2,"სახელმწიფო 3,2,"land 3,2,"valtio 3,2,"isla 3,2,"מדינה"@he 3,2,"கிழக்காசிய 3,2,"valsts 3,2,"østasiatisk 3,2,"کشوری 3,2,"quốc 3,2,"জাপান 4,2,"kontinent"@nb 4,2,"maanosa"@fi

初始算法

随机按行读in.triple,对每个nodeString去hash表查,获取或生成ID后把相关数据顺序追加写入node.csv和edge.csv.

资源监控

因为是按行处理,所以监控下来内存使用150M不到。

堆内存监控,第一小时使用150M左右, 第11小时使用500M,peak memory usage 1GB。(资源利用率低)

耗时估算

原始数据4个G,估算输出数据5个G,前10个小时输出了约300M数据, 按48小时处理1.5G数据算,约3天可以处理完。

算法优化1

利用内存直接存储中间结果,最后一次性写磁盘。

初始算法中有三个对象:(1)存储顶点ID的HashTable; (2) nodes.csv; (3) edges.csv。本来是每处理一行就写一次输出文件,现在将nodes.csv和 edges.csv的结果分别存在两个字符串中最后一次性写磁盘。String最大大小与java虚拟机有关。

算法优化2

利用多线程提高内存和CPU利用率。

文件拷贝一份,供两个线程处理; 一个线程Thread1负责处理顶点,生成顶点ID;两个线程共享一个ConcurrentHashMap(线程安全),和两个计数器count1(线程1处理的行数)和count2(线程二处理的行数);一个线程Thread2负责生成 node1ID,node2ID, edgeString。

必须保证count2始终小于count1

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题模型:
    • in.triple的文件格式
      • node.csv文件格式
        • edge.csv格式
        • 初始算法
          • 资源监控
            • 耗时估算
            • 算法优化1
            • 算法优化2
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档