Найти все возможные комбинации столбца в кадре данных при фиксировании значения в другом столбце - PullRequest
0 голосов
/ 09 мая 2019

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

author_ID | movie_ID
nm0000198 | tt0091954
nm0000198 | tt0468569
nm0000198 | tt4555426
nm0000354 | tt0134119
nm0000354 | tt0091954
nm0000721 | tt0091954

Я бы хотел как-то исправить фильм и создать все возможные комбинации авторов, которые участвовали в этом фильме.Как:

movie_ID | author_A   | author_B
tt0091954| nm0000198  | nm0000354
tt0091954| nm0000198  | nm0000721
tt0091954| nm0000354  | nm0000721

Пожалуйста, помогите, если можете.Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 10 мая 2019

Вы можете достичь этого с помощью самостоятельного соединения

dfA = df.withColumnRenamed('author_ID', 'author_A')
dfB = df.withColumnRenamed('author_ID', 'author_B')
dfA \
    .join(dfB, on=(dfA.movie_ID == dfB.movie_ID) & (dfA.author_A < dfB.author_B)) \
    .drop(dfB.movie_ID) \
    .show()

        +---------+---------+---------+
        | author_A| author_B| movie_ID|
        +---------+---------+---------+
        |nm0000198|nm0000354|tt0091954|
        |nm0000198|nm0000721|tt0091954|
        |nm0000354|nm0000721|tt0091954|
        +---------+---------+---------+

Предложение < должно гарантировать, что мы получим кортеж (author_A, author_B) только один раз

0 голосов
/ 10 мая 2019

Это должно работать для вас.Просто еще один способ написать самостоятельное соединение.

from pyspark.sql.functions import col

joining_condition = [col("a.movie_ID") == col("b.movie_ID") , col("a.author_ID") > col("b.author_ID") ]

df.alias("a")\
    .join(df.alias("b"), joining_condition)\
    .selectExpr("a.movie_ID AS movie_Id",
                "a.author_ID AS author_A",
                "B.author_ID AS author_B")\
    .show()

#+---------+---------+---------+
#| movie_Id| author_A| author_B|
#+---------+---------+---------+
#|tt0091954|nm0000354|nm0000198|
#|tt0091954|nm0000721|nm0000198|
#|tt0091954|nm0000721|nm0000354|
#+---------+---------+---------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...