如何用字典替换pyspark dataframe列值

时间:2019-07-20 07:30:03

标签: pyspark

我有一个如下所示的数据框

  +++++++++++++++++++++
  colA | colB | colC |
  +++++++++++++++++++++
  123  | 3 | 0|
  222  | 0 | 1|
  200  | 0 | 2|

我想用字典d替换colB中的值以得到这样的结果。

d = {3:'a',0:'b}

  +++++++++++++++++++++
  colA | colB | colC |
  +++++++++++++++++++++
  123  | a | 0|
  222  | b | 1|
  200  | b | 2|

1 个答案:

答案 0 :(得分:0)

您应该只使用数据框方法replace,而实际上并不能清楚地说明此用例。

要使用字典,您只需将指定的dict设置为第一个参数,将随机值设置为第二个参数,并将列名设置为第三个参数。

至少在Spark 2.2中,将引发警告,明确指出,由于第一个参数是字典,因此将不考虑第二个参数。

data = [
    (123,3,0),
    (222,0,2),
    (200,0,2)]
df = spark.createDataFrame(data,['colA','colB','colC'])

d = {3:'a', 0:'b}
df_renamed = df.replace(d,1,'colB')
df_renamed.show()

#  +++++++++++++++++++++
#  colA | colB | colC |
#  +++++++++++++++++++++
#  123  | a | 0|
#  222  | b | 1|
#  200  | b | 2|

还请注意,“替换时,新值将转换为现有列的类型” ,如文档内所报告。因此,您的列将被强制转换为字符串。