对帐工具[比较两个大型数据记录]

时间:2017-02-01 17:47:25

标签: java hadoop apache-spark ignite

我被要求建立一个可以比较两个大型数据集的对帐工具(我们可以假设输入源为两个excel)。

excel中的每一行包含40-50列,并记录每个列级别的比较。每个文件包含近300万条记录或大约4-5 GB的数据。[数据可能不是排序格式]

如果我能得到一些暗示,我将不胜感激。 以下技术是否适合

  1. Apache Spark
  2. Apache Spark + Ignite [假设时间框架之间的实时对帐]
  3. Apache Ignite + Apache Hadoop
  4. 建立内部工具的任何建议。

3 个答案:

答案 0 :(得分:0)

我也一直在努力 -

您可以使用Pyspark / Scala将csv文件加载到临时表,并在创建的临时表之上进行查询。

答案 1 :(得分:0)

首先是警告:

编写协调工具包含许多小烦恼和边缘情况,如日期格式,数字格式(数字中的逗号,科学记数法等),复合键,阈值,忽略列,忽略页眉/页脚等等。

如果您只有一个文件要使用明确定义的输入进行记录,那么请考虑自己动手。

但是,如果您可能尝试将其扩展为更通用,那么可以支付现有解决方案,因为从长远来看它会更便宜。

潜在解决方案:

分布式流程的难点在于如何匹配未排序文件中的密钥。

在一个进程中运行它的问题是内存。

我为商业rec工具采用的方法是将CSV保存到h2中的表中,并使用SQL来执行差异。

对于像这样的事情,H2比Oracle快得多。

如果您的数据结构合理,您可以利用h2直接从CSV加载的功能,如果将结果保存在表格中,您也可以将输出写入CSV,或者您可以使用其他框架来编写更结构化的输出或将结果流式传输到网页。

如果你的格式是xls(x)而不是CSV,你应该对各种库进行性能测试来读取文件,因为在处理这个大小时存在很大的差异。

答案 2 :(得分:0)

我一直在解决上述问题,这是解决方案。 https://github.com/tharun026/SparkDataReconciler 截止目前的前提条件是

  1. 两个数据集的列数应相同
  2. 目前,该解决方案仅接受PARQUETS。

该工具为您提供每一列的匹配百分比,因此您可以了解哪个转换出错了。