对于千万行级别的数据,处理起来非常麻烦,例如有一个文件a.txt,大小超过2GB,共2000多万行,每行是一个新闻的相关信息,其中有一列为新闻标题,字符串型,新闻标题较长,现需要对新闻标题进行聚类,将类似标题的新闻归为一类,并将其中代表性的标题作为这一组新闻的标题。

例如"海量数据处理经验交流会今天召开-第一部分","海量数据处理经验交流会今天召开-第二部分","海量数据处理经验交流会今天召开-第三部分",将这三个标题归类为"海量数据处理经验交流会今天召开"。

如何实现?

我的思路是:

首先,从2GB的a.txt文件中,提取出新闻标题这一列,然后将其存入到另一个文件b.txt,这样,就得到一个只包含新闻标题这一列的b.txt文件,文件大小仅为500多MB。

第二步,将其导入到MySQL数据库,具体采用load data infile 'D:/test/news.txt' into table news(newsid,newstitle)这一方法导入。

第三步,由于同时处理上千万条数据,很有可能发生内存不足而发生异常,因此分批从MySQL读取一部分数据(例如一百万条),再利用Levenshtein距离,计算新闻标题(字符串类型)之间的相似性,距离小于等于2的归为一类,并将这一类的第一个新闻标题,截取前面的公共部分作为这一类新闻的标题。

需要注意的是,导入大批量数据到MySQL时,可以采用Python的cursor.executemany()方法,也可以采用Java的PreparedStatement.executeBatch()方法,或者采用MySQL数据库自带的load data infile命令(详见:http://blog.csdn.net/north_easter/article/details/8333137),

我在进行第二步的时候,采用了MySQL自带的命令,第一次执行报错:

The MySQL server is running with the --secure-file-priv so it cannot execute this statement

Google之后才知道,不是随便一个地方的文件都能导入到MySQL数据库,出于MySQL的安全机制,secure_file_priv指定的文件夹里面的文件才能作为数据源导入,因此首先需要使用SHOW VARIABLES LIKE "secure_file_priv"命令找出该文件夹,例如C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\

然后需要把作为数据源的txt文件放在该文件夹下,才能导入,如果txt数据源中如果存在中文字符,则可能会报其他的错误。

数据处理经验尚浅,只能想出这种方法,网上查资料,发现对于海量数据处理,大量采用分治法和Hash(例如SimHash)等方法。

参考:

http://qindongliang.iteye.com/blog/2248888

http://blog.csdn.net/v_july_v/article/details/6279498

海量数据导入MySQL的注意事项的更多相关文章

  1. 【MySQL笔记】Excel数据导入Mysql数据库的实现方法——Navicat

    很多公司尤其有点年头的公司,财务业务部门的各种表单都是excel来做的表格,随着互联网的发展各种业务流程都电子化流程化了,再在茫茫多的文档中去查找某一个年份月份的报告是件相当枯燥的事,所以都在想办法将 ...

  2. 在Linux环境下,将Solr部署到tomcat7中,导入Mysql数据库数据, 定时更新索引

    什么是solr solr是基于Lucene的全文搜索服务器,对Lucene进行了扩展优化. 准备工作 首先,去下载以下软件包: JDK8:jdk-8u60-linux-x64.tar.gz TOMCA ...

  3. mysql安装和mysql图形界面安装以及文本文件导入mysql

    本人大一大二一直使用windows系统,被微软爸爸给惯坏了,一看到cmd命令行就吓尿.现在用ubuntu,每一个操作都是语句,也是得到锻炼(个jb). ubuntu安装mysql和python代码 s ...

  4. (转) PowerDesigner逆向工程导入MYSQL数据库总结

    PowerDesigner逆向工程导入MySQL数据库总结 由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 1.      安装MYS ...

  5. 数据库是.frm,.myd,myi备份如何导入mysql (转)

    今天找了个案例,琢磨了半天,才分析大概出来,数据库是.frm,.myd,myi备份,不会导入mysql,到网上找了些资料,导入成功. 首先说一下这几种文件是干什么的,*.frm是描述了表的结构,*.M ...

  6. 将Excel数据导入mysql数据库的几种方法

    将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面 ...

  7. python2.7 爬虫_爬取小说盗墓笔记章节及URL并导入MySQL数据库_20161201

    1.爬取页面 http://www.quanshu.net/book/9/9055/ 2.用到模块urllib(网页下载),re正则匹配取得title及titleurl,urlparse(拼接完整ur ...

  8. piap.excel 微软 时间戳转换mssql sql server文件时间戳转换unix 导入mysql

    piap.excel 微软 时间戳转换mssql sql server文件时间戳转换unix 导入mysql 需要不个mssql的sql文件导入mysql.他们的时间戳格式不同..ms用的是自定义的时 ...

  9. 使用MySQL Migration Toolkit快速将Oracle数据导入MySQL[转]

    使用MySQL Migration Toolkit快速将Oracle数据导入MySQL上来先说点废话本人最近在学习一些数据库方面的知识,之前接触过Oracle和MySQL,最近又很流行MongoDB非 ...

随机推荐

  1. jquery.validate.js常用扩展函数

    $(function () { // 判断整数value是否等于0 jQuery.validator.addMethod("isIntEqZero", function (valu ...

  2. Android的开发环境的发展演变

    1.Android的开发环境: 之前大家都是安装eclipse,然后再下载安装sdk等插件,还需要配置比较麻烦.不过2013年,有了新的选择,在I/O大会上,谷歌推出新的Android开发环境——An ...

  3. myeclipse自动import

    不管包什么的 直接把代码全写出来 再按 ctrl + shift +o 这是自动导包的 前提是你写的代码是正确的

  4. js 选项卡实现

    <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...

  5. form表单提交和ajax提交的区别

    form表单是整个页面跳到服务器的地址然后提交数据: ajax是往这个地址post数据 <form style="padding:0px;margin:0px;" targe ...

  6. grunt安装_

    grunt_构建WEBJS程序框架,. package.json是文件配置 ====〉〉〉〉 在Gruntfile.js里面会引用到. //目录下直接放node的东西 ,比如: node_module ...

  7. Spring-事物-不依赖应用服务器的开源JTA事物实现

    不依赖应用服务器的开源JTA事物实现JOTM和Atomikos Transactions JOTM 即基于Java开放事务管理器(Java Open Transaction Manager),实现JT ...

  8. 处理Json数据中的日期类型.如/Date(1415169703000)/格式

    在asp.net mvc后台返回到视图中的json数据中想对数据进行操作,发现日期类型无法直接进行操作,需要转换为指定格式才行.在网上也搜了下方法也很多,觉得有点麻烦,最终使用正则搞定了,分享下: v ...

  9. 基于spring mvc的注解DEMO完整例子

    弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件.本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mv ...

  10. 用freemarker生产静态页面

    FreeMarker概述 * FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写     * Template + data model = output    ...