首页 > 解决方案 > 当我从 COBOL 文件中读取十进制值时,它们为 NULL

问题描述

我正在尝试读取 COBOL 文件。我有定义如下的字帖:

10  P1  PIC X(02).
10  P2  PIC X(15).
10  P3  PIC X(01).
10  P4  PIC X(01).
10  P5  PIC X(01).
10  P6  PIC X(01).
10  P7  PIC X(01).
10  P8  PIC S9(06)V99.
10  P9  PIC S9(06)V99.
10  P10  PIC S9(06)V99.
10  P11  PIC S9(06)V99.
10  P12  PIC S9(06)V99.
10  P13  PIC S9(06)V99.
10  P14  PIC S9(06)V99.
10  P15  PIC S9(06)V99.
10  P16  PIC S9(06)V99.
10  P17  PIC S9(06)V99.
10  P18  PIC S9(06)V99.

p8through中的值p18包含带符号的十进制值,但是当我检查结果表时,它们显示为NULL.

我尝试过的事情:

我将其更改S9(06)V99为:

我也尝试将值更改为String( PIC X(20)) 但仍然没有运气。

有什么帮助吗?

注意:正如您所见,我所有的尝试都是使用 COBOL 结构,可能是我可以用我的 SCALA 代码做的一些事情?

编辑 1

val df = ss.read.format("za.co.absa.cobrix.spark.cobol.source")
      .option("copybook", Util.getProperty("hdfs_dir") + "/" + Util.getProperty("copyBook"))
      .option("schema_retention_policy", "collapse_root")
      .load("s3a://my-S3-location/");

编辑 2

根据我从朋友那里收到的一个建议,我将以下选项添加到SparkSession

.option("floating_point_format", "IBM")

我也尝试了@mazaneicha 的建议:

.option("encoding", "ascii")

更多细节

该程序能够读取常规十进制(我有几列具有常规十进制),但是有符号十进制的问题

在此处输入图像描述

标签: apache-sparkcobol

解决方案


从文件中读取数据时,切勿在 cobol 中将变量声明为 numeric(9),而是将变量声明为字母数字 (X)。

为了进一步计算,使用FUNCTION NUMVAL将变量转换为数字

示例:结果 = 函数编号 (P8)。


推荐阅读