При работе с 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.