противоречивые результаты от функций groupBy в pandas и pyspark - PullRequest
0 голосов
/ 06 марта 2020

В настоящее время я переносю свои скрипты из 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    | 
 ...    ...     ...     ....     ... 

На этот раз несколько наблюдений отсутствуют в искровом выходе . Я думаю, что я все правильно написал. Может кто-нибудь помочь? Спасибо

1 Ответ

0 голосов
/ 07 марта 2020

Я могу помочь вам в этом, но нужно знать, что вы: - сделали подсчет, чтобы проверить количество строк в обоих dfs - проверили весь df на наличие пропущенного значения, например, отфильтровали по отсутствующему значению, чтобы увидеть если это в дф а не просто проверено head ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...