使用 OpenCV 3.1,我计算了一批图像的 SIFT 描述符。每个描述符都有一个形状(x, 128)
,我使用基于 pickle 的 .tofile
函数将每个描述符写入磁盘。在图像样本中,x 介于 2000 和 3000 之间
我希望通过pyspark使用Apache Spark的kmeans集群,但我的问题是两部分。
- 是腌制是传输描述符数据的最佳方式
- 如何从一堆泡菜文件到集群就绪数据集以及我应该注意哪些陷阱(Spark、pickling、SIFT)
我感兴趣的是 python 2 代码的序列会是什么样子,假设描述符生成代码和集群环境之间存在一些公共存储
酸洗是传输描述符数据的最佳方式吗?
最好的在这里非常具体。你可以尝试泡菜或protobuf。
如何从一堆泡菜文件获取到群集就绪数据集?
- 反序列化数据。
- 创建一个RDD,它将向量(即每个元素RDD将是一个特征,一个128维向量))。
- 缓存RDD,因为kMeans会一次又一次地使用它。
- 训练 kMeans 模型以获取群集。
例如,LOPQ的家伙,做:
C0 = KMeans.train(first, V, initializationMode='random', maxIterations=10, seed=seed)
其中first
是我提到的RDD,V
是集群的数量,C0
计算的集群(在GitHub的第67行检查)。
- 取消持久化您的 RDD。