2024-10-01 09:25:39 发布
网友
TypeError: 'PCollection' object does not support indexing
尝试将Pcollection转换为列表时出现上述错误:
以及:
def ReadSHP(self, filesList): """ """ sf = shp.Reader(shp=filesList[1], dbf=filesList[2])
如何解决这个问题?感谢任何帮助。在
另一种选择是使用gcevm,并使用ogr2ogr等工具将shapefile转换为GeoJSON。然后可以将GeoJSON加载到BigQuery中,并可以使用BigQuery-GIS进行查询。在
以下是一篇博文,其中包含更多细节https://medium.com/google-cloud/how-to-load-geographic-data-like-zipcode-boundaries-into-bigquery-25e4be4391c8
一般来说,不能将PCollection转换为列表。在
PCollection
PCollection是一个可能是无界且无序的项的集合。Beam允许您对PCollection应用转换。将PTransform应用于PCollection会产生另一个PCollection。应用转换的过程可能分布在一组机器上。所以在一般情况下,不可能把这样的东西转换成本地内存中的元素集合。在
PTransform
组合器只是PTransforms的一个特殊类。他们所做的是将他们看到的所有元素累加起来,对这些元素应用一些组合逻辑,然后输出组合的结果。例如,组合器可以查看传入的元素,对它们进行求和,然后作为结果输出总和。这种组合器将元素的PCollection转换为这些元素和的PCollection。在
PTransforms
beam.combiners.ToList只是应用于PCollection的另一个转换,它可能在一组工作机器上产生另一个PCollection。但是在生成输出元素之前,它并不真正进行任何复杂的组合,它只将所有的seen元素累加到一个列表中,然后输出seen元素的列表。因此,它获取键-值对(在多台计算机上)的元素,将它们放入列表中,然后输出这些列表。在
beam.combiners.ToList
缺少的是从潜在的多台计算机中获取这些列表并在需要时将它们加载到本地程序中的逻辑。这个问题很难用一般的方法(在所有的运行程序、所有可能的IOs和管道结构之间)解决。在
解决方法之一是向管道中添加另一个步骤,将组合的输出(例如总和或列表)写入公共存储(例如,某个数据库中的表或文件)中。然后,当管道完成时,您的程序就可以从该位置加载管道执行的结果。在
有关详细信息,请参阅文档:
另一种选择是使用gcevm,并使用ogr2ogr等工具将shapefile转换为GeoJSON。然后可以将GeoJSON加载到BigQuery中,并可以使用BigQuery-GIS进行查询。在
以下是一篇博文,其中包含更多细节
https://medium.com/google-cloud/how-to-load-geographic-data-like-zipcode-boundaries-into-bigquery-25e4be4391c8
一般来说,不能将
PCollection
转换为列表。在PCollection
是一个可能是无界且无序的项的集合。Beam允许您对PCollection
应用转换。将PTransform
应用于PCollection
会产生另一个PCollection
。应用转换的过程可能分布在一组机器上。所以在一般情况下,不可能把这样的东西转换成本地内存中的元素集合。在组合器只是
PTransforms
的一个特殊类。他们所做的是将他们看到的所有元素累加起来,对这些元素应用一些组合逻辑,然后输出组合的结果。例如,组合器可以查看传入的元素,对它们进行求和,然后作为结果输出总和。这种组合器将元素的PCollection
转换为这些元素和的PCollection
。在beam.combiners.ToList
只是应用于PCollection
的另一个转换,它可能在一组工作机器上产生另一个PCollection
。但是在生成输出元素之前,它并不真正进行任何复杂的组合,它只将所有的seen元素累加到一个列表中,然后输出seen元素的列表。因此,它获取键-值对(在多台计算机上)的元素,将它们放入列表中,然后输出这些列表。在缺少的是从潜在的多台计算机中获取这些列表并在需要时将它们加载到本地程序中的逻辑。这个问题很难用一般的方法(在所有的运行程序、所有可能的IOs和管道结构之间)解决。在
解决方法之一是向管道中添加另一个步骤,将组合的输出(例如总和或列表)写入公共存储(例如,某个数据库中的表或文件)中。然后,当管道完成时,您的程序就可以从该位置加载管道执行的结果。在
有关详细信息,请参阅文档:
相关问题 更多 >
编程相关推荐