Spark - преобразование DataFrame в RowMatrix для эффективного вычисления сходства всех пар - PullRequest
0 голосов
/ 25 октября 2018

У меня большой DataFrame, заполненный отношениями между пользователями и элементами, например:

        item1  item2
user1       0      1
user2       1      0

, и я хочу эффективно решить проблему сходства всех пар.

Я видел, что могуиспользуйте метод columnSimilarities модуля pyspark.mllib, если я работал с объектом RowMatrix.

Поскольку каждый метод, который я придумал, чтобы решить эту проблему с помощью DataFrame, кажется довольно неэффективным,Я хотел бы знать, как лучше всего получить RowMatrix от моего DataFrame.

Или, в лучшем случае, если я что-то упустил, и есть лучший способ справиться со всеми-пар проблемы схожести с DataFrame, я хотел бы услышать об этом.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Как упоминалось в других ответах, нет способа напрямую преобразовать DataFrame в RowMatrix.Сначала вам нужно получить объект RDD.

Для этого на Python :

your_rdd = your_dataframe.rdd.map(list)
your_rowmatrix = RowMatrix(your_rdd)
0 голосов
/ 30 октября 2018

Прочитав немного о RowMatrix, похоже, что вам нужно преобразовать dataframe в RDD.

Для этого вы можете использовать:

val rows = df.content.rdd.map{ case row =>
Vectors.dense(row.toSeq.toArray.map{
    x => x.asInstanceOf[Integer]
  })
}.collect

и затем использовать rows в своем коде.

Я надеюсь, что это полезно.

...