如何在使用字典时使用 replace() 方法替换列值?

How to replace column values using replace() method while using dictionary?

在使用替换方法替换 df 中列的值时,我们如何利用字典来执行 same.I 我的语法有问题。

   person = spark.createDataFrame([
    (0, "Bill Chambers", 0, [100]),
    (1, "Matei Zaharia", 1, [500, 250, 100]),
    (2, "Michael Armbrust", 1, [250, 100]),
    (1,'Adam',4,[200])])\
    .toDF("id", "name", "graduate_program", "spark_status")

diz={'Bill Chambers':'ABC','Adam':'DEF'}

I saw that the syntax is:
person.replace(diz,1,'name')

参数中这里的1有什么意义?

首先,我鼓励您检查 pyspark documentation 并搜索 replace(to_replace, value=<no value>, subset=None) 函数定义。

你正在传递一个字典 diz 与 key/value 对,并且由于该值 1 在你的情况下将被忽略,因此,你将得到以下结果:

>>> person.replace(diz,1,'name').show()
+---+----------------+----------------+---------------+
| id|            name|graduate_program|   spark_status|
+---+----------------+----------------+---------------+
|  0|             ABC|               0|          [100]|
|  1|   Matei Zaharia|               1|[500, 250, 100]|
|  2|Michael Armbrust|               1|     [250, 100]|
|  1|             DEF|               4|          [200]|
+---+----------------+----------------+---------------+

请注意,在您的用法中,您指定为 subset 的列 name 将受到影响,您可以清楚地看到您的字典 key/value 对已被用作 [=19] =].

现在,如果您想测试值参数应该如何工作,请查看此示例:

>>> person.replace(['Adam', 'Bill Chambers'],['Bob', 'Omar'],'name').show()
+---+----------------+----------------+---------------+
| id|            name|graduate_program|   spark_status|
+---+----------------+----------------+---------------+
|  0|            Omar|               0|          [100]|
|  1|   Matei Zaharia|               1|[500, 250, 100]|
|  2|Michael Armbrust|               1|     [250, 100]|
|  1|             Bob|               4|          [200]|
+---+----------------+----------------+---------------+

注意如果要为两列指定另一个to_replace/value列表,请查看dataframe.replace()的以下用法:

>>> person.replace([1, 0],[9, 5],['id', 'graduate_program']).show()
+---+----------------+----------------+---------------+
| id|            name|graduate_program|   spark_status|
+---+----------------+----------------+---------------+
|  5|   Bill Chambers|               5|          [100]|
|  9|   Matei Zaharia|               9|[500, 250, 100]|
|  2|Michael Armbrust|               9|     [250, 100]|
|  9|            Adam|               4|          [200]|
+---+----------------+----------------+---------------+

在前面的示例中,我们针对两个相同的值类型 (int) 列 [id, graduate_program],并强制将所有的 1 替换为 9,将所有的 0 替换为 5。

我希望这能回答你的问题