2017-01-12 3 views
0

У меня есть фрейм данных с форматом, как:Pyspark создавая вложенное поле перегородки

id | product 
------------- 
1 | A 
1 | B 
1 | C 
2 | A 
3 | A 
3 | C 

То, что я хочу сделать это 2 выходной столбец кадра данных, где есть одна строки на ID с массивом для каждого продукт, принадлежащий этому идентификатору. Я пробовал код с mapPartitions(), но я получаю ошибки о невозможности вывода схемы. Я знаю, что мне нужно что-то вернуть в функции карты, но я не могу понять это.

с использованием искровых 1,6

Редактировать

В случае, если кто-то имеет на этот вопрос, я на самом деле пошел с решением здесь, используя combineByKey(): https://stackoverflow.com/a/27043562/1181412

Это дало большую гибкость работы поля более подробным образом

+0

Я на самом деле собираюсь пойти с этим, поскольку он, кажется, приближает меня. Благодаря! – ElPresidente

ответ

0

Немного неудобно, но работает

a = sqlContext.createDataFrame(sc.parallelize([ 
      (1, 'A'), (1, 'B'), (1, 'C'), 
      (2, 'A'), 
      (3, 'A'), (3, 'C')]), ['id', 'product']) 

sqlContext.createDataFrame(
    a.rdd.reduceByKey(lambda x, y: x + ',' + y), 
    ['id', 'products']).show()