问题
我有一个Spark数据框df
,具有约650万行,包含两列:
对于每个ID,我在Spark机器学习库中使用BucketedRandomProjectionLSH.approxSimilarityJoin
来获取欧几里德距离低于特定阈值的最近邻居。在进行近似相似性联接时,我遇到了一个错误(请参见下面的“错误”部分)。
我的想法是,这可能是由于计算量过多而使执行程序用尽了内存,但是我不确定。您能帮我还是给我一些暗示可能是什么原因造成的?我也想知道是否有更好的方法来获取每个ID的最近邻居。谢谢。
代码
brp = BucketedRandomProjectionLSH(
inputCol='features',
outputCol='hashes',
bucketLength=2,
numHashTables=2)
nn_model = brp.fit(df)
df_transformed = nn_model.transform(df)
df_nearest_neighbors = nn_model\
.approxSimilarityJoin(
datasetA=df_transformed,
datasetB=df_transformed,
threshold=0.5,
distCol='dist')\
.select(
col('datasetA.ID').alias('ID_NN'),
col('datasetB.ID').alias('ID'),
col('dist').alias('DIST'))
df_nearest_neighbors.select('ID').distinct().count()
错误
在执行上述代码时,Spark作业运行了很长时间后遇到以下错误。
[org.apache.spark.memory.TaskMemoryManager] - Failed to allocate a page (67108864 bytes), try again.
集群配置