Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Lambda函数为Python中的字典分配键和值?_Python_Apache Spark_Pyspark - Fatal编程技术网

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

如何使用Lambda函数为Python中的字典分配键和值?,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我正在尝试将具有多列的数据帧转换为字典。为了做到这一点,我首先检查了我是否可以从数据帧访问这些值,并且我能够做到这一点 >>> dmap = {} >>> der.show() +----------+-------------------+ | tablename|incremental_log_ids| +----------+-------------------+ |db.t1 | 1| |db.t2

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

>>> 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中的惰性计算在这里适用)。因此,在运行count()、collect()等操作后,您需要检查
dmap

第二个问题是
map()。在本地运行时,
dmap
可能会被追加到,但您不应该指望这一点

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

哪张照片

{'db.t1': '1', 'db.t2': '2', 'db.t3': '3'}
但是,您需要注意这一点,因为数据帧可能包含太多数据,无法在驱动程序上收集。

so
dmap=dict(der.rdd.map(lambda x:(x[0],x[1])).collect()
{'db.t1': '1', 'db.t2': '2', 'db.t3': '3'}