В настоящее время я переносю свои скрипты из pandas в pyspark. Я получил противоречивые результаты от простой groupBy
функции в pandas и pyspark, и я запутался. Я ценю, если кто-то может мне помочь.
Мой набор данных панели выглядит следующим образом:
RIC date hour minute volume
VOD 01-01 9 11 55
VOD 01-01 9 11 55
VOD 01-01 10 12 79
VOD 01-01 10 13 55
VOD 01-01 10 15 245
VOD 01-01 11 14 356
VOD 01-02 11 15 6798
... ... ... ... ...
BAT 01-01 9 11 556
BAT 01-02 9 12 552
BAT 01-02 9 14 551
... ... ... .... ...
В pandas я использовал следующий код, чтобы получить общий объем для каждой акции в каждую минуту
df=pd.read_csv(r'/home/user/stock.csv', parse_dates=[1])
df_volume=df.groupby(['RIC','date','hour','minute']).sum().reset_index()
df_volume.head(5)
Затем я получил правильный вывод
RIC date hour minute volume
VOD 01-01 9 11 110
VOD 01-01 10 12 79
VOD 01-01 10 13 55
... ... ... .... ...
Однако, когда я кодирую в искре, я использовал следующее
df=spark.read.format('csv').option('header','true').load('/home/user/stock.csv')
df.printSchema()
root
|-- RIC: string (nullable = true)
|-- date: date (nullable = true)
|-- hour: float (nullable = true)
|-- minute: float (nullable = true)
|-- volume: float (nullable = true)
Затем я закодировал
from pyspark.sql.functions import countDistinct, avg,stddev,count, sum
df_volume=df.groupBy(['RIC','date','hour','minute']).agg(sum(volume))
df_volume.orderBy(['RIC','date','hour','minute'],ascending=[True,True,True])
df_volume.show()
Тогда я получил неверный вывод
+----+--------+-------+----------+----------+
RIC date hour minute volume
+----+--------+-------+----------+----------+
VOD | 01-02 | 10 | 13 | 355 |
VOD | 01-03 | 14 | 03 | 357 |
VOD | 01-05 | 15 | 45 | 683 |
... ... ... .... ...
На этот раз несколько наблюдений отсутствуют в искровом выходе . Я думаю, что я все правильно написал. Может кто-нибудь помочь? Спасибо