如何将PySpark DataFrame转换为Python字典列表?
将PySpark DataFrame转换为Python字典列表的方法
嘿,刚接触PySpark的话,这个转换需求其实很好实现~我给你分享两种简单靠谱的方法,完全能得到你想要的字典列表格式:
方法一:使用collect() + Row.asDict()
这是最直接的PySpark原生方法,不需要依赖其他库:
# 假设你的PySpark DataFrame变量名为df dict_list = [row.asDict() for row in df.collect()]
原理说明:
df.collect()会把DataFrame中的所有数据从集群拉取到Driver节点,返回一个Row对象的列表- 每个
Row对象都有asDict()方法,可以直接把行数据转换成键值对形式的字典 - 最后用列表推导式把所有Row转成字典,就得到你想要的格式了
⚠️ 注意:如果你的DataFrame数据量很大,collect()会把全部数据加载到Driver的内存里,可能导致内存溢出,这种方法更适合小数据集。
方法二:借助Pandas转换
如果你熟悉Pandas的话,也可以通过中间转成Pandas DataFrame来实现:
dict_list = df.toPandas().to_dict('records')
原理说明:
df.toPandas()会把PySpark DataFrame转换成Pandas DataFrame(同样会把数据拉到Driver节点)- Pandas的
to_dict('records')方法可以直接把DataFrame转换成字典列表,参数'records'表示每行对应一个字典
⚠️ 注意:和第一种方法一样,大数据量场景下要谨慎使用,另外要注意数据类型的转换(比如PySpark的Decimal类型可能会转成Python的float或Decimal对象)。
两种方法最终得到的结果都是你期望的格式:
[{"title":"The Eight Hundred", "imdb_score":7.2, "Worldwide_Gross(dollars)":460699653}, {"title":"Bad Boys for Life", "imdb_score":6.6, "Worldwide_Gross(dollars)":426505244}, {"title":"Tenet", "imdb_score":7.8, "Worldwide_Gross(dollars)":334000000}, {"title":"Sonic the Hedgehog", "imdb_score":6.5, "Worldwide_Gross(dollars)":308439401}, {"title":"Dolittle", "imdb_score":5.6, "Worldwide_Gross(dollars)":245229088}]
内容的提问来源于stack exchange,提问作者Lydia Wen
相关产品推荐
相关产品推荐

