Как узнать общую сумму за каждый месяц, используя spark в python - PullRequest
0 голосов
/ 28 сентября 2018

Я ищу способ агрегирования по месяцам моих данных.Я хочу, во-первых, сохранить только месяц в моей дате посещения.Мой DataFrame выглядит следующим образом:

Row(visitdate = 1/1/2013, 
patientid = P1_Pt1959, 
amount = 200, 
note = jnut, 
) 

Мой последующий объект - группировать по дате посещения и вычислять сумму.Я пробовал это:

from pyspark.sql import SparkSession

spark = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.config("spark.some.config.option", "some-value") \
.getOrCreate()

file_path = "G:/Visit Data.csv"
patients = spark.read.csv(file_path,header = True)
patients.createOrReplaceTempView("visitdate")

sqlDF = spark.sql("SELECT visitdate,SUM(amount) as totalamount from visitdate GROUP BY visitdate")
sqlDF.show()

Это результат:

visitdate|totalamount|
+----------+-----------+
|  9/1/2013|    10800.0|
|25/04/2013|    12440.0|
|27/03/2014|    16930.0|
|26/03/2015|    18560.0|
|14/05/2013|    13770.0|
|30/06/2013|    13880.0

Мой объект - получить что-то вроде этого:

  visitdate|totalamount|
+----------+-----------+
|1/1/2013|    10800.0|
|1/2/2013|    12440.0|
|1/3/2013|    16930.0|
|1/4/2014|    18560.0|
|1/5/2015|    13770.0|
|1/6/2015|    13880.0|

1 Ответ

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

Вам нужно сократить свои даты до месяцев, чтобы они правильно группировались, а затем выполните groupBy / sum.Для этого есть функция свечей вызова date_trunc.Например.

from datetime import date
from pyspark.sql.functions import date_trunc, sum

data = [
    (date(2000, 1, 2), 1000),
    (date(2000, 1, 2), 2000),
    (date(2000, 2, 3), 3000),
    (date(2000, 2, 4), 4000),
]

df = spark.createDataFrame(sc.parallelize(data), ["date", "amount"])

df.groupBy(date_trunc("month", df.date)).agg(sum("amount"))

+-----------------------+-----------+
|date_trunc(month, date)|sum(amount)|
+-----------------------+-----------+
|    2000-01-01 00:00:00|       3000|
|    2000-02-01 00:00:00|       7000|
+-----------------------+-----------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...