首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spark - Converting dataframe to list提高性能

spark - Converting dataframe to list提高性能
EN

Stack Overflow用户
提问于 2016-02-12 21:43:19
回答 3查看 26.5K关注 0票数 3

我需要将Spark dataframe的一列转换为列表,以便稍后用于matplotlib

代码语言:javascript
复制
df.toPandas()[col_name].values.tolist()

看起来有很高的性能开销,这个操作大约需要18秒,有没有其他方法可以做到这一点或提高性能?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-12 21:57:05

如果您确实需要一个本地列表,那么在这里您可以做的并不多,但是一个改进是只收集单个列,而不是整个DataFrame

代码语言:javascript
复制
df.select(col_name).flatMap(lambda x: x).collect()
票数 7
EN

Stack Overflow用户

发布于 2017-06-23 22:02:21

你可以这样做:

代码语言:javascript
复制
>>> [list(row) for row in df.collect()]

示例:

>>> d = [['Alice', 1], ['Bob', 2]]

>>> df = spark.createDataFrame(d, ['name', 'age'])

>>> df.show()

+-----+---+

| name|age|

+-----+---+

|Alice| 1|

| Bob| 2|

+-----+---+

>>> to_list = [list(row) for row in df.collect()]

print list

结果:[[u'Alice', 1], [u'Bob', 2]]

票数 14
EN

Stack Overflow用户

发布于 2020-04-16 18:05:28

您可以使用迭代器来节省内存toLocalIterator。迭代器将消耗与此分区中最大分区一样多的内存。如果你只需要使用一次结果,那么迭代器就是完美的例子。

代码语言:javascript
复制
d = [['Bender', 12], ['Flex', 123],['Fry', 1234]]
df = spark.createDataFrame(d, ['name', 'value'])
df.show()
+------+-----+
|  name|value|
+------+-----+
|Bender|   12|
|  Flex|  123|
|   Fry| 1234|
+------+-----+`
values = [row.value for row in df.toLocalIterator()]

print(values)
>>> [12, 123, 1234]

此外,只有当生成的Pandas的DataFrame很小时,才应该使用toPandas()方法,因为所有数据都加载到驱动程序的内存中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35364133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档