首页 文章

pyspark的月度汇总

提问于
浏览
2

我正在寻找一种按月汇总数据的方法 . 我想首先在我的访问日期保持一个月 . 我的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|

2 回答

  • 0

    您可以先format visitdate 然后按以下方式执行以下操作:

    from pyspark.sql import functions as F
    
    (df.withColumn('visitdate_month', F.date_format(F.col('visitdate'), '1/M/yyyy'))
    .groupBy('visitdate_month')
    .agg(F.sum(F.col('visitdate_month')))
    )
    
  • 0

    看起来列“visitdate”类型是String,可以使用“unix_timestamp”转换为Timestamp,然后使用“date_format”转换为所需格式的String . 在此之后,可以在Scala上执行分组:

    val visitMonthDf = df.withColumn("visitMonth", date_format(unix_timestamp($"visitdate", "dd/MM/yyyy").cast(TimestampType), "1/M/yyyy"))
    visitMonthDf.groupBy("visitMonth").agg(sum($"totalamount"))
    

相关问题