Как я могу сохранить BlockMatrix (org.apache.spark.mllib.linalg.distributed.BlockMatrix) в формате hdf или локально? - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь вычислить все пары по кратчайшему пути большого графа с помощью spark. Я использую код из github, результат вычисления (матрица расстояний) сохраняется в BlockMatrix (org.apache.spark. mllib.linalg.distributed.BlockMatrix). Я хочу знать, как сохранить результат в формате hdf или локально, чтобы в следующий раз я мог быстро проанализировать результат без его повторного вычисления.

Теперь я просто использую ненаправленный граф (4038 узлов) для проверки кода. Я попытался решить проблему с помощью приведенных ниже кодов. Но эти способы недостаточно хороши.

1. Преобразуйте BlockMatrix в LocalMatrix, затем используйте метод toString, чтобы сохранить результат в локальном файле. Когда график будет достаточно большим, строка результата будет слишком большой, чтобы произошла ошибка OutOfMemoryError: Java в куче

2. Преобразуйте BlockMatrix в RDD с помощью метода блоков, а затем сохраните Astextfile, формат файла результатов не удобен для чтения и анализа.

Поэтому я хочу спросить, есть ли какой-нибудь умный способ сохранитьBlockMatrix, чтобы я мог использовать наименьший код для завершения сохранения и чтения результата.

//first way
val resfile = new PrintWriter(new File("result.txt"))
resfile.write(result.toLocal().toString(Int.MaxValue, Int.MaxValue))
resfile.close()
//second way
result.distMatrix.blocks.saveAsTextFile("hdfs://master:9000/result")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...