toLocalIterator 使用后似乎为空
Posted
技术标签:
【中文标题】toLocalIterator 使用后似乎为空【英文标题】:toLocalIterator seems empty after using it 【发布时间】:2020-05-06 19:36:15 【问题描述】:为什么在将 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)
几乎没有计算时间或输出。
【问题讨论】:
【参考方案1】:toLocalIterator()
返回 Scala Iterator
(通过 python 的 Java 网关)。
在 Scala 中,Iterator
特征扩展了 TraversableOnce
。顾名思义,它只能迭代一次(并且只能使用next()
方法)。
对
it.next()
的调用将返回迭代器的下一个元素,并且 推进迭代器的状态。再次调用next
然后迭代器将在返回的元素之外产生一个元素 之前。如果没有更多元素要返回,对next
的调用将抛出一个NoSuchElementException
.
如果您需要对同一个集合进行两次迭代,您可能可以使用duplicate()
来获得两个可独立遍历的迭代器实例。
【讨论】:
以上是关于toLocalIterator 使用后似乎为空的主要内容,如果未能解决你的问题,请参考以下文章
React native - 如果表单提交时为空,则突出显示 TextInput