我在一些文本文件中有大量的数据(大约20 gig),并且我一次拥有所有20 gig的数据,因此我不想在创建它们时对它们进行部分处理,文本文件中的每一行指定一个记录,但该记录是文本格式的,数据的属性是相互连接的,这是一个文本文件中的示例行:
00000000015tashkhisi---8686745428M.....
前10个字符表示记录编号=>0000000001
位置11处的字符显示记录类型=>5
接下来的12个字符显示记录的所有者=>Tashkisi---
接下来的10个字符显示所有者的身份=>8686745428
下一个字符显示所有者的性别=>m
等等。。。。。。
这只是一个示例,您可以认为我的记录在实际数据中有100个列或属性。
但是像大数据中的任何其他输入一样,输入数据中也有噪声,并且有些记录不正确并且有问题,例如我们可以用++--0000001作为记录编号,这是一个无效的记录编号。
现在我想要的是:我想要找到输入数据中的所有错误,并以如下聚合方式报告它们:
Tashkisi为所有者的记录->有总错误的x%
性别为m->的记录有总错误的y%
记录类型为5=>250000(总计y%)的所有者名称错误
记录类型为5=>4000000(总计x%)时所有者标识出错
记录类型为3=>250000(总计k%)的所有者名称出错
记录类型为3=>4000000(总计z%)时所有者标识出错
......
名称错误总数=>10000000,百分比为6%
等等。。。。
你可以看到属性是相互依赖的,我需要大量的 group by
以及 substring
在我的程序中,我也希望报表生成的速度非常快,输入数据的大小是20gig,我无法在内存中加载整个数据来处理它们。
我知道我可以用 Spark
, Elasticsearch
以及 logstash
, mapreduce
等等。但我想知道哪一个更适合做这个特定的任务,为什么?我想知道生成此报告的最佳方法是什么,是否有任何工具可以快速生成此报告?请告诉我你为什么推荐那个工具。
1条答案
按热度按时间to94eoyn1#
您可以使用spark将数据作为Dataframe读取,一旦Dataframe就绪,您就可以对其执行有效和无效检查,以生成所需的统计信息。
现在棘手的部分是生成Dataframe,为此您可以执行以下操作。
现在从这个Dataframe开始,有多个机会,您可以直接使用spark生成统计信息,或者如果您有一个活动的es集群,则加载到es中(不推荐)
如果您的数据是json结构的,并且您希望在数据集上具有快速搜索功能,那么es是很好的。对于聚合和所有es提供近似结果。