сгруппировать и преобразовать несколько столбцов в список, используя pyspark - PullRequest
0 голосов
/ 28 апреля 2018

Я использую pyspark. Итак, у меня есть искровой датафрейм, который выглядит так:

a | b | c
5 | 2 | 1
5 | 4 | 3
2 | 4 | 2
2 | 3 | 7

Нужен вывод:

a | b_list
5 | 2,1,4,3
2 | 4,2,3,7

Важно сохранить последовательность, указанную в выводе.

1 Ответ

0 голосов
/ 28 апреля 2018

Следующие результаты в последних 2 столбцах агрегированы в столбец массива:

df1 = df.withColumn('lst', f.concat(df['b'], f.lit(','), df['c']).alias('lst'))\
  .groupBy('a')\
  .agg( f.collect_list('lst').alias('b_list'))

Теперь присоедините элементы массива:

#Simplistic udf to joing array:
def join_array(col):
    return ','.join(col)

join = f.udf(join_array)

df1.select('a', join(df1['b_list']).alias('b_list'))\
  .show()

Печать:

+---+-------+
|  a| b_list|
+---+-------+
|  5|2,1,4,3|
|  2|4,2,3,7|
+---+-------+
...