需求:我有2个json结构化文件,想要逐行对比,找出各个文件中的唯一行

29 篇文章 0 订阅
28 篇文章 3 订阅

方法一:

 使用java编程,读取文件 逐行对比,但每行都要和另一个文件的所有行做对比,复杂度 m*n

方法二:

  linux命令是否有可以实现?grep就可以,缺点是完全匹配,没有因为结构化数据字段顺序的不同而去做匹配

  grep的几个参数说明

         -v反向查找,即获取没有匹配到的

         模式选择regex pattern的不同,具体区别有机会可以多试试

         -f  obtain PATTERN from FILE

         -F PATTERN is a set of newline-separated strings

         -w, --word-regexp         force PATTERN to match only whole words

         -x, --line-regexp         force PATTERN to match only whole lines

  示例:
   

  $ grep  -xf a2.txt a1.txt // 获取匹配到的记录 (inner join)
  $ grep  -xvf a2.txt a1.txt // 反向匹配,即只提取a1.txt才有的内容,两个文件参数位置倒换一下就获取到了a2.txt独有的内容

方法三:

  数据是结构化形式,所以将文件统一放在一个工具里实现,mysql,这样就是2个表:

   1可以各自只有一列,这样就直接join连接比较

   2因为是结构化,可以存为多个字段,这样即便2个文件的存储时列顺序不同也可以实现比较

方式三:

   spark读取方式。通过spark-shell.sh   --master loca[5]    val s=spark.read.schema(schema).json("file:///tmp/c1.json")

   注意:这里没有通过yarn方式去比较,我试过了同样的方式读取上面的s,虽然不报错,但是也没有内容,不是schema定义不对,就是yarn方式client可能不支持吧,具体原因未知

方式四:

   使用excel的vlookup,我昨天尝试对比不到3000的数据量,它的执行开启了4个线程,还是有些慢的,而且通过匹配后还要进行筛选,因为是双向比较,这种操作要执行2遍,而且我的excel不知道怎么回事,使用vlookup,在wps可以,在excel就语法错误,也是很郁闷了

 

关于这个需求,我的2个数据,一个在hadoop上,一个在本地服务器,且结构化参数的顺序不同,我将hadoop上的拿到了本地服务器,然后通过再将这2个文件分别通过spark读取本地文件,分别获取后再做的比较,最终将差异数据存到了mysql

另外还有一个需求,一份数据在excel,一份在mysql,这次还简单一些,只有一列数据,我统一放在了excel上,通过vlookup做的比较,虽然只有不到3000,但效果差强人意,很慢

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值