PySpark TaskMemoryManager: не удалось выделить страницу при выполнении приблизительного сходства - PullRequest
0 голосов
/ 04 декабря 2018

Вопрос

У меня есть фрейм данных Spark df с ~ 6,5 миллионами строк и двумя столбцами:

  • ID: строка
  • особенности: [широта, долгота] оба имеют тип float.

Для каждого идентификатора я использую BucketedRandomProjectionLSH.approxSimilarityJoin в библиотеке машинного обучения Spark, чтобы получить ближайших соседей, где евклидово расстояние ниже определенного порога,Выполняя примерное объединение сходства, я столкнулся с ошибкой (см. Раздел «Ошибка» ниже).

Мне кажется, что это может быть связано с слишком большими вычислениями и исполнителю не хватило памяти, однако я не увереноб этом.Не могли бы вы помочь мне или дать несколько советов о том, что может быть причиной этого.Также мне интересно, есть ли лучший способ получить ближайших соседей для каждого удостоверения личности.Спасибо.

Код

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.

Конфигурация кластера

  • Spark 2.3.1
  • Клиент пряжи
  • 44 исполнителя, 2 ядра каждый, память исполнителя 4G
  • память драйвера 6G
...