【问题标题】:Convert an RDD to iterable: PySpark?将 RDD 转换为可迭代:PySpark?
【发布时间】:2015-12-22 16:04:27
【问题描述】:

我有一个 RDD,我通过加载文本文件并对其进行预处理来创建它。我不想收集它并将其保存到磁盘或内存(整个数据),而是想将它传递给 python 中的其他一些函数,该函数一个接一个地消耗数据是可迭代的形式。

这怎么可能?

data =  sc.textFile('file.txt').map(lambda x: some_func(x))

an_iterable = data. ##  what should I do here to make it give me one element at a time?
def model1(an_iterable):
 for i in an_iterable:
  do_that(i)

model(an_iterable)

【问题讨论】:

    标签: python apache-spark pyspark rdd


    【解决方案1】:

    相信你想要的是toLocalIterator():

    【讨论】:

      【解决方案2】:
      data =  sc.textFile('file.txt').map(lambda x: some_func(x))
      # you need to call RDD method() then loop
      for i in data.collect():
        print i
      

      【讨论】:

      • 此代码会将所有 RDD 内容拉到驱动程序的主内存中,这在任何大型 RDD 上都会失败。请求者要求使用迭代器将元素一次一个地流式传输到驱动程序的主内存中。 RDD 的.toLocalIterator() 方法是正确的:不是.collect()
      猜你喜欢
      • 2016-12-13
      • 1970-01-01
      • 2016-05-29
      • 2021-06-29
      • 2023-03-13
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多