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

时间:2017-10-27 19:52:53

标签: java hadoop mapreduce binary 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文件?

2 个答案:

答案 0 :(得分:0)

我对hadoop了解不多,而且假设该文件来自IBM Mainframe(Z-OS)。另外看https://github.com/rbheemana/Cobol-to-Hive,看起来它可以处理VB文件,所以应该有办法。

文件传输警告

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

可能的解决方案

可能的解决方案可能包括:

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

答案 1 :(得分:0)

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

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

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