, но блочная матрица все еще имеет 1003043309L столбцов и строк. Но для небольшого примера, приведенного в вопросе, у меня нет этой проблемы
я есть набор данных, содержащий работников с их демографической информацией, такой как возраст, пол, адрес и т. Д., А также место их работы. Я создал RDD из набора данных и преобразовал его в DataFrame.
Есть несколько записей для каждого идентификатора. Поэтому я создал DataFrame, который содержал только идентификатор работника и различные офисные помещения, в которых он работал.
|----------|----------------|
| **ID** **Office_Loc** |
|----------|----------------|
| 1 |Delhi, Mumbai, |
| | Gandhinagar |
|---------------------------|
| 2 | Delhi, Mandi |
|---------------------------|
| 3 |Hyderbad, Jaipur|
-----------------------------
Я хочу рассчитать косинусное сходство между каждым работником и каждым другим работником на основе местоположения их офиса ».
Итак, я перебрал строки DataFrame, извлекая одну строку из DataFrame:
myIndex = 1
values = (ID_place_df.rdd.zipWithIndex()
.filter(lambda ((l, v), i): i == myIndex)
.map(lambda ((l,v), i): (l, v))
.collect())
а затем с помощью карты
cos_weight = ID_place_df.select("ID","office_location").rdd\
.map(lambda x: get_cosine(values,x[0],x[1]))
чтобы вычислить косинусное сходство между извлеченной строкой и целым кадром данных.
Я не думаю, что мой подход хорош, так как я перебираю строки в DataFrame, так как он отрицает всю цель использования spark. Есть ли лучший способ сделать это в pyspark? Добрый совет.