有一些解决方案可以读取edcdic文件,如-https://github.com/rbheemana/cobol-to-hive,但当edcdic文件包含偏移量长度不等的行时,此操作失败。
我编写了mapreduce作业来读取ebcdic文件,并通过基于偏移值读取每一行来转换为csv/parquet,因此所有行的长度都是固定的,下面是示例代码
Configuration conf = new Configuration();
conf.setInt(FixedLengthInputFormat.FIXED_RECORD_LENGTH, 100);
Job job = Job.getInstance(conf);
job.setInputFormatClass(FixedLengthInputFormat.class);
当输入ebcdic文件不能被偏移量(记录)长度整除时,这也会失败。
有没有办法读取和转换ebcdic文件与页眉和页脚的ascii文件?
2条答案
按热度按时间gdrx4gfi1#
科布里克斯可能就是你要找的。它是spark的开源cobol数据源。
它支持固定长度和可变长度的记录,这可能与您面临的问题有关。
免责声明:我为absa工作,我是这个库的开发人员之一。
exdqitrt2#
我对hadoop知之甚少,我假设该文件来自ibm大型机(z-os)。也在看https://github.com/rbheemana/cobol-to-hive,看起来它可以处理vb文件,所以应该有办法。
文件传输警告
如果文件是大型机上的vb文件,则每个记录都有一个记录描述符字(rdw)。默认情况下,某些文件传输函数会删除rdw。你可能会想要rdw。当然jrecord可以使用它
可能的解决方案
可能的解决方案包括:
在进行传输之前,在mainframe/as400上将文件转换为固定宽度-非常简单。
在大型机上提取页眉/页脚细节-非常简单
使用jrecord提取页眉/页脚或转换为固定宽度-非常简单
看看项目copybookinputformat它是基于jrecord的,它可能工作得更好。它应该有更好的cobol支持。
使用jrecord读取文件(需要自己编写代码才能加载到hadoop)。