我是Spark的新手,我需要从大型机解析输入文件并将其存储在HDFS中。 我的输入主机文件正在转换为ASCII格式。在转换过程中,EBCDIC Signed字段将转换为字符。
输入文件数据ASCII格式: TR000000282811111}
读取文件的代码。
df = sqlContext.read.text("<file location>")
parexp1 = df.select(
df.value.substr(1,2).alias('RECORD_TYPE'),
df.value.substr(3,10).cast('integer').alias('RECORD_COUNT'),
df.value.substr(13,6).alias('TOTAL_NET_AMOUNT_DUE')
)
金额字段值11111}只不过是+ 111110。因此,对于每个金额字段,我需要读取该字段的最后一个字符,在本例中为“}”。根据最后一个字符,我需要进行一些转换。
我可以使用以下语法
获取最后一个字符 lent = parexp1.select (substring(col('TOTAL_NET_AMOUNT_DUE'),-1,1))
但是,我不知道如何进行转换并将其添加回DF。必须将值11111}转换为111110并存储回数据框。
作为第一步,我尝试使用以下语法将最后一个字符存储到DF。
Test_udf = udf(lambda TLR_TOTAL_NET_AMOUNT_DUE: parexp1.select (substring(col('TOTAL_NET_AMOUNT_DUE'),-1,1)), StringType())
parexp1.withColumn("Test1", Test_udf(parexp1.TLR_TOTAL_NET_AMOUNT_DUE))
上面的语法给了我方法 getnewargs ([])不存在异常。
我尝试了其他方法,但最终出现了一个或另一个错误。 我的目标是转换数据并将其添加回DF。
你能帮我在PYSPARK中如何做到这一点吗?我非常感谢你的帮助。