在Scala Spark中的DataFrame列中用新值替换指定值

时间:2018-08-14 13:43:01

标签: apache-spark apache-spark-sql

是否有一种方法可以将“ Col1”中的指定值替换为新值。 假设我有一个要替换的值列表

from: [1,2,3]
to: ['one','two','three']

我知道我可以使用.withColumn并说when 1 then "one" otherwise等,但是当我的值列表很长时,这不是很方便。与udf相同。我假设应该有某种mapValues函数。

1 个答案:

答案 0 :(得分:0)

您可以创建一个与旧值映射的新值的数据框,然后进行联接。 如果map_df有密钥对,而orig_df是原始数据帧,则为

from pyspark.sql.functions import *

new_df = orig_df.join(map_df, 'old_key', 'left')

new_df = new_df.withColumn('final_col', when(isnull(col('new_key')), col('old_key')).otherwise(col('new_key')))

new_df = new_df.drop('old_key').drop('new_key').withColumnRenamed('final_col', 'old_key')

new_df是您的数据框。