首页 > 解决方案 > 如何用字典替换pyspark数据框列值

问题描述

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

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

我想用 dict d 替换 colB 中的值以获得这样的结果。

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

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

标签: pyspark

解决方案


您应该简单地使用实际上并没有清楚地解释这个用例的数据框方法替换。

要使用字典,您必须简单地将指定的 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|

另请注意,“替换时,新值将转换为现有列的类型”,如文档中所述。结果,您的列将被转换为字符串。


推荐阅读