Счетчик мультисетей в PySpark (с использованием структурированной потоковой передачи) - PullRequest
0 голосов
/ 23 октября 2018

Предположим, у меня есть фрейм данных с двумя столбцами: a и b.Теперь я хотел бы иметь счет на пару (a, b) и общий счет для такой, чтобы она имела следующую структуру.

Предположим, у меня есть следующие данные:

$ (a, b) \ in {(1, 1), (1, 2), (2, 3), (3, 4)} $

Тогда я бы хотел получить следующие строки:

$ [1, 2, {1: 1, 2: 1}]], [2, 1, {3: 1}], [3, 1, {4: 1}] $

На словах первая строка выражает тот факт, что всего имеется 2 наблюдения.Одно наблюдение для b, равного 1, и одно наблюдение для b, равного 2. Строка 2 содержит информацию о том, что a = 2 получила одно наблюдение, наблюдение, что b = 3.И третья строка выражает тот факт, что существует одно наблюдение для a = 3, а именно b = 4.

Как я могу сделать это с помощью PySpark?

Я попробовал следующее:

df = df\
    .groupBy('a', 'b')\
    .agg(
        count('*').alias('count')
    )\
    .groupBy('a')\
    .agg(
        sum('count').alias('total')
    )

df.show()

Но это, очевидно, не работает.Я теряю информацию о количестве на пару.

...