从大型机EBCDIC文件中读取页眉和页脚



有一些解决方案可用于读取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文件?

我对hadoop了解不多,我认为文件来自IBM大型机(Z-OS)。同时查看https://github.com/rbheemana/Cobol-to-Hive,看起来它可以处理VB文件,所以应该有一种方法。

文件传输警告

如果该文件是大型机上的VB文件,则每条记录都将有一个记录描述符字(RDW)。默认情况下,某些文件传输函数会删除RDW。你可能会想要RDW。Certaily JRecord可以使用它

可能的解决方案

可能的解决方案包括:

  • 在进行传输之前,在大型机/As400上将文件转换为固定宽度-非常容易做到
  • 提取主机上的页眉/页脚详细信息-非常简单
  • 使用JRecord提取页眉/页脚或转换为固定宽度-非常简单
  • 看看基于JRecord的CopybookInputFormat项目,它可能会更好地工作。它应该有更好的Cobol支持
  • 使用JRecord读取文件(需要自己编写代码才能加载到hadoop中)

Cobrix可能是您想要的。它是Spark的一个开源COBOL数据源。

它支持固定长度和可变长度的记录,这可能与您面临的问题有关。

免责声明:我为ABSA工作,我是这个库的开发人员之一。

最新更新