PYSPARK创建新专栏

时间:2018-02-25 23:26:08

标签: python apache-spark pyspark spark-dataframe

我是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中如何做到这一点吗?我非常感谢你的帮助。

0 个答案:

没有答案