分析输入数据,发现大数据中输入的错误



我在一些文本文件中有大量的数据(大约20 Gig(,我同时拥有所有20 Gig的数据,所以我不想在创建它们时对它们进行部分处理,文本文件中的每一行都指定了一条记录,但这条记录是文本格式的,数据的属性相互连接,这是一个文本文件的示例行:

00000000015tashkhisi---8686745428M.....

前10个字符显示记录编号=>0000000001

位置11处的字符显示记录的类型=>5

接下来的12个字符显示记录的所有者=>tashkhisi-

接下来的10个字符显示所有者的身份=>8686745428

下一个字符显示所有者的性别=>M

等等。。。。。。

这只是一个例子,您可以认为我的记录在实际数据中有100列或属性。

但是,就像大数据中的任何其他输入一样,输入数据中存在噪声,一些记录是不正确的,存在问题,例如,我们可能将++-000001作为记录编号,这是一个无效的记录编号。

现在我想要什么:我想在我的输入数据中找到所有错误,并以这样的聚合方式报告它们:

以tashkhisi作为所有者进行记录->具有总错误的x%

带有性别M的记录->具有总错误的y%

所有者名称中的错误,其中记录类型为5=>250000(合计y%(

记录类型为5时所有者标识出错=>4000000(合计x%(

所有者名称中的错误,其中记录类型为3=>250000(合计k%(

记录类型为3时所有者标识出错=>4000000(总z%(

名称错误总数=>10000000,百分比为6%

等等。。。。

你可以看到属性是相互依赖的,我的程序中需要大量的group bysubstring,而且我希望报告生成得非常快,输入数据的大小是20Gig,我无法在内存中加载整个数据来处理它们。

我知道我可以使用SparkElasticsearchlogstashmapreduce等等。但我想知道哪一个更适合做这项特定的任务,为什么?我想知道生成这份报告的最佳方法是什么,有什么工具可以快速生成这份报告吗?请告诉我你建议使用该工具的原因。

您可以使用spark将数据作为数据帧读取,一旦数据帧准备好,您就可以对其执行有效和无效检查,以生成所需的统计信息。

现在棘手的部分是生成数据帧,为此您可以执行以下操作。

df = spark.read.text(r"C:stackoverflowsamplesfixedWidth.txt")
df.select(
df.value.substr(1,10).alias('RecordNumber'),
df.value.substr(11,1).alias('Type'),
df.value.substr(12,12).alias('Owner'),
df.value.substr(24,10).alias('identity'),
df.value.substr(34,1).alias('gender')
).show()
+------------+----+------------+----------+------+
|RecordNumber|Type|       Owner|  identity|gender|
+------------+----+------------+----------+------+
|  0000000001|   5|tashkhisi---|8686745428|     M|
|  ++--000001|   5|tashkhisi---|8686745428|     M|
|  _+00000001|   5|tashkhisi---|++86745428|     M|
|  0000000001|   5|tashkhisi---|8686745428|     M|
|  0000000001|   5|tashkhisi---|8686745428|     M|
|  0000000001|   5|tashkhisi---|8686745428|     M|
|  0000000001|   5|tashkhisi---|8686745428|     M|
+------------+----+------------+----------+------+

现在,从这个数据帧中,有多个机会,你可以只使用spark直接生成统计数据,或者如果你有一个活动的ES集群,然后加载到ES(不推荐(

如果您的数据是json结构的,并且您希望在数据集上具有快速搜索功能,那么ES是很好的。对于聚合和所有ES提供近似结果。

相关内容

  • 没有找到相关文章

最新更新