当我从 COBOL 文件中读取十进制值时,它们变为 NULL
Decimal values come NULL when I read them from COBOL file
我正在尝试读取 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.
p8
到 p18
中的值包含带符号的十进制值,但是当我检查结果 table 时,它们显示为 NULL
.
我尝试过的东西:
我将 S9(06)V99
更改为:
S9(06)V99 USAGE COMP
NULL
还在显示
S9(06)V99 USAGE COMP-3
Spark
作业已停止
S9(06)V99 USAGE COMP-6
Spark
作业已停止
我也尝试将值更改为 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")
更多详情
程序能够读取正则小数(我有几列有正则小数),但是带符号的小数[=72]有问题=]
从文件中读取数据时,切勿在 cobol 中将变量声明为 numeric(9),
而不是将变量声明为字母数字 (X)。
为了进一步计算,使用 FUNCTION NUMVAL
将变量转换为数字
示例:
结果 = 函数数值 (P8).
我正在尝试读取 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.
p8
到 p18
中的值包含带符号的十进制值,但是当我检查结果 table 时,它们显示为 NULL
.
我尝试过的东西:
我将 S9(06)V99
更改为:
S9(06)V99 USAGE COMP
NULL
还在显示S9(06)V99 USAGE COMP-3
Spark
作业已停止S9(06)V99 USAGE COMP-6
Spark
作业已停止
我也尝试将值更改为 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")
更多详情
程序能够读取正则小数(我有几列有正则小数),但是带符号的小数[=72]有问题=]
从文件中读取数据时,切勿在 cobol 中将变量声明为 numeric(9), 而不是将变量声明为字母数字 (X)。
为了进一步计算,使用 FUNCTION NUMVAL
将变量转换为数字示例: 结果 = 函数数值 (P8).