Как конвертировать в Pyspark столбец из 10 миллионов записей в столбцы из 20000 записей? - PullRequest
0 голосов
/ 25 апреля 2019

Как вы можете видеть на изображении, у нас есть фрейм данных с одним столбцом, который содержит 10 миллионов значений.Мы намерены изменить этот фрейм данных и получить тот, который делит 10 миллионов значений в столбцах 20000 значений.Есть ли способ выполнить это действие в Pyspark?

https://i.stack.imgur.com/FvZKf.png

Далее я добавляю изображение, где вы можете увидеть, чего я хочу достичь.На рисунке показан пример входных значений (точка, в которой мы находимся) и выходных значений (результат, который мы хотим достичь).

https://i.stack.imgur.com/6gJHg.png

У меня есть еще одно сомнение, следующий шагэто преобразовать столбцы в строки.

https://i.stack.imgur.com/udHbk.png

1 Ответ

0 голосов
/ 26 апреля 2019

Вот один из возможных способов (я сгенерировал данные формы на изображении, точные размеры можно переключать, настраивая входные параметры для generate_data):

from pyspark.sql import functions as f
from pyspark.sql import Window

def generate_data(size=10000, colsize=200):
    # generate data with a partition marker every colsize rows
    # to mark where the next column begins
    data = (sc.parallelize(np.random.rand(size).tolist())
            .zipWithIndex()
            .toDF(schema=['value', 'rownum'])
           .withColumn('colnum',(f.col('rownum')/colsize).cast('integer')))

    # generate a row number within column
    win = Window.partitionBy('colnum').orderBy('rownum')
    data = data.withColumn('col_rownum', f.rank().over(win))
    return data

df = generate_data(size=10010)

# now pivot to get columns
pivoted = (df.groupby('col_rownum')
           .pivot('colnum')
           .max('value')
           .orderBy('col_rownum'))

pivoted.select(pivoted.columns[1:])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...