在使用replace方法替换df中的列值时,我们如何利用字典来做到这一点。我在语法上遇到问题。
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的意义是什么?
答案 0 :(得分:0)
首先,我建议您检查pyspark documentation并搜索replace(to_replace, value=<no value>, subset=None)
函数定义。
您正在传递带有键/值对的字典diz
,由于该值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]|
+---+----------------+----------------+---------------+
请注意,在您指定为name
的仅使用情况列subset
中会受到影响,并且您可以清楚地看到您的字典key/value
对已被用作to_replace/value
现在,如果要测试value参数应如何工作,请查看以下示例:
>>> 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。
我希望这能回答您的问题