如何在同一列中应用数据验证后保持原始列

时间:2017-09-15 06:27:00

标签: scala apache-spark

我有一项验证小数和日期字段的任务。我能够验证同一列上的小数和日期,但不能保留旧的列值。

输入:

id,amt1
1,123
2,321
3,345
4,543
5,789

当前输出:

id,amt1
1,12.3
2,32.1
3,34.5
4,54.3
5,78.9

预期产出:

id,amt1,original_amt1_values
1,12.3,123
2,32.1,321
3,34.5,345
4,54.3,543
5,78.9,789

下面是代码,我能够验证十进制字段但不能保留原始值。请帮助我。我想在数据框本身保留其原始列。

 SourceFileDF = SourceFileDF.withColumn("amt1", DecimalConversion(col(amt1)))

DecimalConversion是我的UDF,SourceFileDF是我的数据帧。

2 个答案:

答案 0 :(得分:0)

您可以使用临时列名称" amt1"并使用列重命名

SourceFileDF.withColumn("amt1_converted", DecimalConversion(col(amt1)))
SourceFileDF.withColumnRenamed("amt1", "original_amt1_values")
SourceFileDF.withColumnRenamed("amt1_converted", "amt1")

答案 1 :(得分:0)

您可以使用select并在一行中提供别名:

sourceFileDF.select( 
     DecimalConversion($"amt1").as("amt1") , 
     $"amt1".as("original_amt1_values") 
)