elasticsearch,pyspark,bigdata,data-analysis,Apache Spark,elasticsearch,Pyspark,Bigdata,Data Analysis" /> elasticsearch,pyspark,bigdata,data-analysis,Apache Spark,elasticsearch,Pyspark,Bigdata,Data Analysis" />

Apache spark 分析输入数据,发现大数据输入错误

Apache spark 分析输入数据,发现大数据输入错误,apache-spark,elasticsearch,pyspark,bigdata,data-analysis,Apache Spark,elasticsearch,Pyspark,Bigdata,Data Analysis,我在一些文本文件中有大量数据(大约20 Gig),我同时拥有所有20 Gig数据,因此我不想在创建它们时对它们进行部分处理,文本文件中的每一行指定一条记录,但该记录是文本格式的,数据的属性彼此连接,这是一个文本文件中的示例行: 00000000015tashkhisi---8686745428M..... 前10个字符显示记录编号=>000000000 1 位置11处的字符显示记录类型=>5 接下来的12个字符显示记录的所有者=>Tashkhhisi--- 接下来的10个字符显示所有者的身份=

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

00000000015tashkhisi---8686745428M.....
前10个字符显示记录编号=>000000000 1

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

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

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

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

等等

这只是一个例子,你可以考虑我的记录在实际数据中有100列或属性。 但与大数据中的任何其他输入一样,输入数据中也存在噪音,一些记录不正确且存在问题,例如,我们可能将++--0000001作为记录编号,这是一个无效的记录编号

现在我想要的是: 我希望找到输入数据中的所有错误,并以如下聚合方式报告它们:

以Tashkhhisi为所有者的记录->有x%的总错误

性别为M->的记录占总错误的y%

记录类型为5=>250000(总计y%)的所有者名称出错

记录类型为5=>4000000(总数的x%)时所有者标识出错

记录类型为3=>250000(总计k%)的所有者名称中存在错误

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

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

等等

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


我知道我可以使用
Spark
Elasticsearch
logstash
mapreduce
等等。但我想知道哪一个更适合做这个特定的任务,为什么?我想知道生成此报告的最佳方法是什么,是否有任何工具可以快速生成此报告?请告诉我您建议使用该工具的原因。

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

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

df = spark.read.text(r"C:\stackoverflow\samples\fixedWidth.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提供近似结果