Суммируйте столбец в dataframe и возвращайте результаты как int - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть фрейм данных pyspark со столбцом чисел (сумма).Мне нужно сложить этот столбец (сумму), а затем вернуть результат в виде int в переменной Python.

Набор данных выглядит следующим образом:

date,p1id,p2id,amount,p3id
1/1/2013,U2_P1,p@c.com,100,P_P

С датой группировки и агрегирования посумма.

groupby_revenue = df.groupby(['date']).sum()
print(groupby_revenue)

вывод:

DataFrame[visitdate: string]

исходный вывод:

1/1/2013    13000
1/1/2014    16090
1/1/2015    17330

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

При работе с spark необходимо понимать его execution process и programming api (pyspark - http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html).Это полностью отличается от pandas/python исполнения.Его выполнение зависит от lazy evaluation, когда вам нужно проверить данные, вам нужно выполнить действие, такое как show, first, collect или take.Без этих действий он возвращается на dataframe с schema (так в вашем вопросе).

Позвольте мне познакомить вас с несколькими примерами: -

process_df = sqlContext.createDataFrame([
    ['2013-01-01','U2_P1','p@c.com','100','P_P'],
    ['2013-01-01','U2_P2','p@c.com','100','P_P1'],
    ['2014-01-01','U2_P1','p@c.com','100','P_P'],
    ['2014-01-01','U2_P2','p@c.com','100','P_P1'],
    ['2015-01-01','U2_P1','p@c.com','100','P_P'],
    ['2015-01-01','U2_P2','p@c.com','100','P_P1']
], ['date','p1id','p2id','amount','p3id'])

#This prints Schema instead of Data
print process_df
DataFrame[date: string, p1id: string, p2id: string, amount: string, p3id: string]

#This prints data instead of schema
process_df.show()
+----------+-----+-------+------+----+
|      date| p1id|   p2id|amount|p3id|
+----------+-----+-------+------+----+
|2013-01-01|U2_P1|p@c.com|   100| P_P|
|2013-01-01|U2_P2|p@c.com|   100|P_P1|
|2014-01-01|U2_P1|p@c.com|   100| P_P|
|2014-01-01|U2_P2|p@c.com|   100|P_P1|
|2015-01-01|U2_P1|p@c.com|   100| P_P|
|2015-01-01|U2_P2|p@c.com|   100|P_P1|
+----------+-----+-------+------+----+

agg_data = process_df.groupby(['date']).agg({'amount':'sum'})

#This prints Schema instead of Data
print agg_data
DataFrame[date: string, sum(amount): double]

from pyspark.sql import functions as F

#This prints data instead of schema
agg_data.show()
+----------+-----------+
|      date|sum(amount)|
+----------+-----------+
|2015-01-01|      200.0|
|2014-01-01|      200.0|
|2013-01-01|      200.0|
+----------+-----------+

from pyspark.sql import functions as F
agg_data.select('date', F.col('sum(amount)').alias('sum')).show()
+----------+-----+
|      date|  sum|
+----------+-----+
|2015-01-01|200.0|
|2014-01-01|200.0|
|2013-01-01|200.0|
+----------+-----+

Это пример для печати только данных, если вам нужно перенести эти данные в python, а затем использовать команду collect, take, first, head.Вот несколько примеров: -

print agg_data.collect()
[Row(date=u'2015-01-01', sum(amount)=200.0),
 Row(date=u'2014-01-01', sum(amount)=200.0),
 Row(date=u'2013-01-01', sum(amount)=200.0)]
print agg_data.first()
Row(date=u'2015-01-01', sum(amount)=200.0)
print agg_data.take(1)
[Row(date=u'2015-01-01', sum(amount)=200.0)]
agg_data.head()
Row(date=u'2015-01-01', sum(amount)=200.0)

Вот как мы можем переносить данные в python и спорить по ним.

Hope this will help a lot.
0 голосов
/ 20 сентября 2018

Вам необходимо собрать его:

from pyspark.sql import functions as F

groupby_revenue = df.groupby(['date']).agg(F.sum('amount')).collect()[0][0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...