我已经看到了许多工具,如syncsort,informatica等,它们足够有效地将EBCDIC大型机文件转换为ASCII。由于我们的公司规模很小,不想在任何工具上投资,我有一个挑战将EBCDIC大型机文件转换为ASCII。上游是大型机,我正在将整个数据迁移到hdfs中,但由于hdfs的效率不足以处理大型机,我被要求转换为Spark/java rode例程来转换这些大型机EBCDIC文件。我知道当文件被导出时,文件会被转换成ASCII格式,但是压缩十进制的COMP/COMP3不会被转换。我需要写一个逻辑来转换这些大型机EBCDIC部分转换成ASCII的文件,以便我们可以在hadoop中做进一步的处理。因为我在这个网站是新手,甚至不能添加我的示例ebcdic文件。请您考虑以下作为示例文件内容,其中包含ascii以及垃圾字符下面包含一些垃圾,这是在薪资字段,即部门字段,它有薪酬数据type..below是emp.txt文件
101 101GANESH 10000á?
102 102RAMESH 20000欧元
103 103NAGESH 40000欧元
下面是empcopybook
01 EMPLOYEE-DETAILS.
05 EMP-ID PIC 9(03).
05 EMP-NAME PIC X(10).
05 EMP-SAL PIC 9(05).
05 DEPT PIC 9(3) COMP-3.发布于 2016-08-15 19:17:49
在Java语言中,有一个库可以与spark一起使用,称为JRecord,用于将EBCDIC二进制文件转换为ASCII码。
你可以在这个人here上找到的代码
这可以通过函数newAPIHadoopFile与Scala集成,在spark中运行它。这段代码是Hadoop代码,但在spark上工作得很好。
发布于 2016-08-22 14:25:46
还有这个选项(它也使用JRecord):
它基于CopybookHadoop,它看起来像是蒂亚戈提到的CopybookInputFormat的克隆。
文档中的任何方式:
此示例从本地二进制文件"file:///home/cdap/DTAR020_FB.bin“”中读取数据,并使用文本区"COBOL Copybook“中给出的模式对其进行解析。它将删除字段"DTAR020-DATE”,并按照文本区中指定的模式生成结构化记录。
{
"name": "CopybookReader",
"plugin": {
"name": "CopybookReader",
"type": "batchsource",
"properties": {
"drop" : "DTAR020-DATE",
"referenceName": "Copybook",
"copybookContents":
"000100* \n
000200* DTAR020 IS THE OUTPUT FROM DTAB020 FROM THE IML \n
000300* CENTRAL REPORTING SYSTEM \n
000400* \n
000500* CREATED BY BRUCE ARTHUR 19/12/90 \n
000600* \n
000700* RECORD LENGTH IS 27. \n
000800* \n
000900 03 DTAR020-KCODE-STORE-KEY. \n
001000 05 DTAR020-KEYCODE-NO PIC X(08). \n
001100 05 DTAR020-STORE-NO PIC S9(03) COMP-3. \n
001200 03 DTAR020-DATE PIC S9(07) COMP-3. \n
001300 03 DTAR020-DEPT-NO PIC S9(03) COMP-3. \n
001400 03 DTAR020-QTY-SOLD PIC S9(9) COMP-3. \n
001500 03 DTAR020-SALE-PRICE PIC S9(9)V99 COMP-3. ",
"binaryFilePath": "file:///home/cdap/DTAR020_FB.bin",
"maxSplitSize": "5"
}
}
}发布于 2018-08-23 03:12:37
您可以使用Cobrix,它是Spark的COBOL数据源。它是开源的。
您可以使用Spark加载文件,解析记录,并以您想要的任何格式存储它们,包括纯文本,这似乎就是您正在寻找的格式。
免责声明:我为ABSA工作,我是这个库背后的开发者之一。我们的重点是1)易用性,2)性能。
https://stackoverflow.com/questions/38937768
复制相似问题