【问题标题】:Read header and footer from mainframe EBCDIC file从大型机 EBCDIC 文件中读取页眉和页脚
【发布时间】:2018-08-23 03:19:52
【问题描述】:

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

【问题讨论】:

    标签: java hadoop mapreduce binary ebcdic


    【解决方案1】:

    我对 hadoop 了解不多,我假设该文件来自 IBM 大型机 (Z-OS)。又看了https://github.com/rbheemana/Cobol-to-Hive,好像可以处理VB文件所以应该有办法。

    文件传输警告

    如果文件是大型机上的 VB 文件,则每条记录都会有一个记录描述符字RDW)。某些文件传输函数默认会删除 RDW。您可能需要 RDW。当然JRecord可以使用它

    可能的解决方案

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-10
        • 2012-05-04
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        • 2011-12-29
        • 1970-01-01
        相关资源
        最近更新 更多