gpt4 book ai didi

python - 如何使用 Lambda 函数为 Python 中的字典分配键和值?

转载 作者:行者123 更新时间:2023-12-03 23:48:05 24 4
gpt4 key购买 nike

我正在尝试将具有多列的数据框转换为字典。为此,我首先检查了我是否可以从数据框中访问这些值,并且我能够做到。

>>> dmap = {}
>>> der.show()
+----------+-------------------+
| tablename|incremental_log_ids|
+----------+-------------------+
|db.t1 | 1|
|db.t2 | 2|
|db.t3 | 3|
+----------+-------------------+
>>> der.rdd.map(lambda x: (x[0], x[1])).collect()
[('db.t1', '1'), ('db.t2', '2'), ('db.t3', '3')]

但是,当我尝试使用如下所示的 lambda 函数将值添加到字典时,在迭代完成后我看不到字典中的键值对。
>>> def addk(k:str, v:str):
... dmap[k] = v
...
>>> der.rdd.map(lambda x: addk(x[0], x[1]))
PythonRDD[117] at RDD at PythonRDD.scala:53
>>>
>>> dmap
{}

从最后一条语句可以看出,dmap在迭代完成后不显示任何键值对。
任何人都可以让我知道我是否在这里犯了任何错误,我该如何纠正?

最佳答案

这里有两个问题。第一个问题是您的操作没有运行。 map()不急切地运行(Spark 中的惰性求值在这里适用)。所以你需要检查dmap在运行一个 Action 之后,例如 count()、collect() 等。

第二个问题是map()在工作人员上运行,但您希望添加值的对象在驱动程序上。可能会发生dmap在本地运行时被附加到,但你不应该指望它。

一个简单的实现可能只是对 collect() 结果的字典理解。 :

dmap = {r[0]:r[1] for r in der.collect()}

哪个打印
{'db.t1': '1', 'db.t2': '2', 'db.t3': '3'}

但是,您需要小心这一点,因为数据帧可能包含太多要在驱动程序上收集的数据。

关于python - 如何使用 Lambda 函数为 Python 中的字典分配键和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61343552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com