繁体   English   中英

如何使用 Lambda function 将键和值分配给 Python 中的字典?

[英]How to assign key and values to a dictionary in Python using Lambda function?

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

>>> 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 function 将值添加到字典中时,迭代完成后我看不到字典中的键值对。

>>> 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 ,比如count()、collect()等。

第二个问题是map()在工作程序上运行,但是您希望将值添加到其中的 object 在驱动程序上。 在本地运行时可能会附加dmap ,但您不应指望这一点。

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

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

哪个打印

{'db.t1': '1', 'db.t2': '2', 'db.t3': '3'}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM