为什么BucketedRandomProjectionLSH在pyspark中花费大量时间处理100万张图像?

时间:2019-01-10 11:58:04

标签: python apache-spark pyspark

我有一个看起来像这样的数据框:

data.show()

+--------------------++-------------
|            feature| id        |
+--------------------++-------------
|[2.23668528E8, 1....| image1   | 
|[2.23668528E8, 1....| image2   |
|[2.23668528E8, 1....| image3   |
|[2.23668528E8, 1....| image4   |
|[2.23668528E8, 1....| image5   |

我试图在所有对之间找到相似之处。这些功能基本上是从vgg16模型提取的Numpy向量。行数大约为一百万,并且所有要素都存储在s3中。我正在使用pyspark做到这一点。我尝试了以下步骤:

  • 从列表中的s3获取所有文件路径。
  • 使用sc.parallelize(文件路径列表,300)分配所有路径,然后调用一个函数,该函数将从s3中的每个路径的每个执行器中下载功能。
  • 将rdd转换为数据框
  • 最后,在此数据帧上调用LSH。

问题是在这种情况下作业不断失败。同时,按照以下链接中的建议,LSH可以在极短的时间内计算数百万个文件的相似性:https://databricks.com/blog/2017/05/09/detecting-abuse-scale-locality-sensitive-hashing-uber-engineering.html

这些是我使用过的spark-submit参数:

spark-submit --verbose --deploy-mode cluster --num-executors 5 --executor-cores 40 --executor-memory 110G --driver-cores 20 --driver-memory 42G --conf spark.yarn.appMasterEnv.ENVIRONMENT=dev --conf spark.executorEnv.ENVIRONMENT=dev --conf spark.yarn.appMasterEnv.REGION=us-east-1 --conf spark.executorEnv.REGION=us-east-1 --conf spark.dynamicAllocation.enabled=false --conf spark.shuffle.service.enabled=false --conf spark.dynamicAllocation.executorIdleTimeout=1200s --conf spark.network.timeout=42000s  s3://<mainfile.py>

我还尝试将所有功能复制到HDFS并遵循相同的方法,但是没有任何效果。任何帮助将不胜感激?

0 个答案:

没有答案