使用toLocalIterator后似乎为空。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用toLocalIterator后似乎为空。相关的知识,希望对你有一定的参考价值。
为什么在将Spark DataFrame的每个分区映射到Pandas Dataframe后,我只能对其分区循环一次?
例如,我将有以下输出
columns = sdf.schema.fieldNames()
parts = sdf.repartition(2).rdd.mapPartitions(lambda iterator: [pd.DataFrame(list(iterator), columns=columns)]).toLocalIterator()
for df in parts:
print(df.shape)
但下一次我运行这个循环时。
for df in parts:
print(df.shape)
几乎没有计算时间和输出。
答案
toLocalIterator()
返回 Scala Iterator
(通过python的Java网关)。
在Scala中。Iterator
特质延伸 TraversableOnce
. 顾名思义,它只能迭代一次(而且只能通过使用 next()
方法)。)
调用
it.next()
将返回迭代器的下一个元素并推进迭代器的状态。调用next
再调用同一个迭代器,就会得到之前返回的元素之外的一个元素。如果没有更多的元素要返回,则调用next
会抛出NoSuchElementException
.
如果你需要在同一个集合上迭代两次,你可能可以使用 duplicate()
以获得两个可独立遍历的迭代器实例。
以上是关于使用toLocalIterator后似乎为空。的主要内容,如果未能解决你的问题,请参考以下文章
Android 6.0 api 23 - 获得许可后,我的位置为空[重复]
使用 Thymeleaf 时,Spring 安全会话范围似乎为空