Вот один из возможных способов (я сгенерировал данные формы на изображении, точные размеры можно переключать, настраивая входные параметры для 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:])