Возможно ли создать кросс-таблицу из одного столбца в pyspark? - PullRequest
0 голосов
/ 01 мая 2019

Я хочу создать таблицу, в которой будут отображаться перекрестные таблицы пользователей, принадлежащих к каждой комбинации сегментов в Pyspark.Ниже приведен воспроизводимый пример того, как выглядит мой исходный фрейм данных и как выглядит обнадеживающее решение в Python, но я не уверен, как воспроизвести такое решение в pyspark.

student = ['Tom', 'Tom', 'Alice', 'Alice', 'Alice', 'Jon', 'Jon', 'Sara', 'Sara', 'Sara', 'Jason', 'Jason', 'Jason']
course = ['Algebra', 'Biology', 'Calc', 'Biology', 'Physics', 'Physics', 'Algebra', 'Calc', 'English','Biology', 'English', 'Physics', 'Algebra']

## Original Dataframe setup
df =pd.DataFrame({'Student': student, 'Course': course})


def intersection(lst1, lst2):
    temp = set(lst2)
    lst3 = [value for value in lst1 if value in temp]
    size = len(lst3)/len(lst1)*100.0
    return size

combinations = [(x, y) for x in df['Course'].unique() for y in df['Course'].unique() if x!=y]
courses = pd.DataFrame(combinations, columns=['c1', 'c2'])
courses['c1 in c2'] = 1.0

for i in range(courses.shape[0]):

    k = df.loc[df['Course'] == courses['c1'][i], 'Student']
    j = df.loc[df['Course'] == courses['c2'][i], 'Student']
    courses['c1 in c2'][i] = intersection(k, j)

## Ideal solution if possible
courses = courses.pivot(index='c1', columns='c2', values='c1 in c2')
courses.replace(np.nan, 100.0, inplace=True)

Таким образом, вы можете увидеть на итоговом курсе данных: 33,33% студентов, изучающих алгебру, также изучают биологию и т. Д. Я уверен, что в Python есть более эффективный способ сделать это, так какхорошо, но я действительно надеюсь воссоздать это в Pyspark, если это возможно.

...