Dictionary 将Pyspark数据帧转换为字典

Dictionary 将Pyspark数据帧转换为字典,dictionary,pyspark,Dictionary,Pyspark,我正在尝试将Pyspark数据帧转换为字典 下面是示例CSV文件- Col0, Col1 ----------- A153534,BDBM40705 R440060,BDBM31728 P440245,BDBM50445050 我想出了这个密码- from rdkit import Chem from pyspark import SparkContext from pyspark.conf import SparkConf from pyspark.sql import SparkSessi

我正在尝试将Pyspark数据帧转换为字典

下面是示例CSV文件-

Col0, Col1
-----------
A153534,BDBM40705
R440060,BDBM31728
P440245,BDBM50445050
我想出了这个密码-

from rdkit import Chem
from pyspark import SparkContext
from pyspark.conf import SparkConf
from pyspark.sql import SparkSession

sc = SparkContext.getOrCreate()
spark = SparkSession(sc)

df = spark.read.csv("gs://my-bucket/my_file.csv") # has two columns

# Creating list
to_list = map(lambda row: row.asDict(), df.collect())

#Creating dictionary
to_dict = {x['col0']: x for x in to_list }

这将创建一个如下所示的字典-

'A153534': {'col0': 'A153534', 'col1': 'BDBM40705'}, 'R440060': {'col0': 'R440060', 'col1': 'BDBM31728'}, 'P440245': {'col0': 'P440245', 'col1': 'BDBM50445050'} 
但是我想要一本这样的字典-

{'A153534':'BDBM40705'},{'R440060':'BDBM31728'},{'P440245':'BDBM5044050'}

我该怎么做

我尝试了Yolo提供的rdd解决方案,但出现了错误。你能告诉我我做错了什么吗

py4j.protocol.Py4JError:调用时出错 o80.是一道屏障。Trace:py4j.Py4JException:方法isBarrier[]没有 不存在 位于py4j.reflection.ReflectionEngine.getMethodReflectionEngine.java:318 位于py4j.reflection.ReflectionEngine.getMethodReflectionEngine.java:326 在py4j.Gateway.invokeGateway.java:274 在py4j.commands.AbstractCommand.invokeMethodAbstractCommand.java:132 在py4j.commands.CallCommand.executeCallCommand.java:79 在py4j.GatewayConnection.runGatewayConnection.java:238 java:748


以下是一种使用以下工具进行操作的方法:

这可以帮助您:

df=spark.read.csv'/FileStore/tables/Create_dict.txt',header=True df=df.withColumn'dict',to_jsoncreate_mapdf.Col0,df.Col1 df_list=[行['dict']表示df中的行。选择'dict'。收集] df_列表 输出为:

[{A153534:BDBM40705}', “{R440060:BDBM31728}”, “{P440245:BDBM50445050}”
我想你想要{x['col0']:x['col1']对于x in to_list}我已经在答案中提供了数据帧版本。如果有帮助的话试试。嗨,约洛,我有个错误。我分享了我最初问题中的错误。你能帮我吗?你能展示一下你的数据框架的模式吗?还有你的pyspark版本
df.rdd.map(lambda x: {x.Col0: x.Col1}).collect()

[{'A153534': 'BDBM40705'}, {'R440060': 'BDBM31728'}, {'P440245': 'BDBM50445050'}]