分析输入数据并在大数据中发现输入错误

bbmckpt7  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(439)

我在一些文本文件中有大量的数据(大约20 gig),并且我一次拥有所有20 gig的数据,因此我不想在创建它们时对它们进行部分处理,文本文件中的每一行指定一个记录,但该记录是文本格式的,数据的属性是相互连接的,这是一个文本文件中的示例行:

  1. 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 等等。但我想知道哪一个更适合做这个特定的任务,为什么?我想知道生成此报告的最佳方法是什么,是否有任何工具可以快速生成此报告?请告诉我你为什么推荐那个工具。

to94eoyn

to94eoyn1#

您可以使用spark将数据作为Dataframe读取,一旦Dataframe就绪,您就可以对其执行有效和无效检查,以生成所需的统计信息。
现在棘手的部分是生成Dataframe,为此您可以执行以下操作。

  1. df = spark.read.text(r"C:\stackoverflow\samples\fixedWidth.txt")
  2. df.select(
  3. df.value.substr(1,10).alias('RecordNumber'),
  4. df.value.substr(11,1).alias('Type'),
  5. df.value.substr(12,12).alias('Owner'),
  6. df.value.substr(24,10).alias('identity'),
  7. df.value.substr(34,1).alias('gender')
  8. ).show()
  9. +------------+----+------------+----------+------+
  10. |RecordNumber|Type| Owner| identity|gender|
  11. +------------+----+------------+----------+------+
  12. | 0000000001| 5|tashkhisi---|8686745428| M|
  13. | ++--000001| 5|tashkhisi---|8686745428| M|
  14. | _+00000001| 5|tashkhisi---|++86745428| M|
  15. | 0000000001| 5|tashkhisi---|8686745428| M|
  16. | 0000000001| 5|tashkhisi---|8686745428| M|
  17. | 0000000001| 5|tashkhisi---|8686745428| M|
  18. | 0000000001| 5|tashkhisi---|8686745428| M|
  19. +------------+----+------------+----------+------+

现在从这个Dataframe开始,有多个机会,您可以直接使用spark生成统计信息,或者如果您有一个活动的es集群,则加载到es中(不推荐)
如果您的数据是json结构的,并且您希望在数据集上具有快速搜索功能,那么es是很好的。对于聚合和所有es提供近似结果。

展开查看全部

相关问题