2016-10-20 3 views
1

Im используя искру 1.6.2 с dataframeагрегат Dataframe pyspark

И я хочу, чтобы преобразовать эту dataframe

+---------+-------------+-----+-------+-------+-------+-------+--------+ 
|ID  |   P |index|xinf |xup |yinf |ysup |  M | 
+---------+-------------+-----+-------+-------+-------+-------+--------+ 
|  0|10279.9003906| 13| 0.3| 0.5| 2.5| 3.0|540928.0| 
|  2|12024.2998047| 13| 0.3| 0.5| 2.5| 3.0|541278.0| 
|  0|10748.7001953| 13| 0.3| 0.5| 2.5| 3.0|541243.0| 
|  1|  10988.5| 13| 0.3| 0.5| 2.5| 3.0|540917.0| 
+---------+-------------+-----+-------+-------+-------+-------+--------+ 

в

+---------+-------------+-----+-------+-------+-------+-------+--------+ 
|Id  |   P |index|xinf |xup |yinf |ysup |  M | 
+---------+-------------+-----+-------+-------+-------+-------+--------+ 
|  0|10514.3002929| 13| 0.3| 0.5| 2.5| 3.0|540928.0,541243.0| 
|  2|12024.2998047| 13| 0.3| 0.5| 2.5| 3.0|541278.0| 
|  1|  10988.5| 13| 0.3| 0.5| 2.5| 3.0|540917.0| 
+---------+-------------+-----+-------+-------+-------+-------+--------+ 

Итак, я хочу, чтобы сократить Id, и вычислять среднее из строк P и объединять строки M. Но я не могу этого сделать, используя функцию agg искры.

вы можете мне помочь, пожалуйста,

ответ

0

Вы можете groupBy столбец ID, а затем агрегировать каждый столбец в зависимости от того, что вам нужно, mean и concat поможет.

from pyspark.sql.functions import first, collect_list, mean 

df.groupBy("ID").agg(mean("P"), first("index"), 
        first("xinf"), first("xup"), 
        first("yinf"), first("ysup"), 
        collect_list("M")) 
+0

Я получил Undefined переменный: среднее, первый и CONCAT, зная, что им с помощью от pyspark.sql.functions импорта * – MrGildarts

+0

Да, но до сих пор не работаю я всегда получаю нерешенный импорт: первый, средний – MrGildarts

+0

@AlbertoBonsanto 'CONCAT 'не может использоваться как функция агрегации. Пожалуйста, исправьте это. –

Смежные вопросы