每日总结

今日进行了测试

数据清洗:

   要求将day_id一列中的数值清洗为真实的日期格式,可用字符串表示。

      数据1对应日期2021-09-01,依次类推,15对应日期2021-09-15

3、数据分析处理:

   (1)统计每天各个机场的销售数量和销售金额。

要求的输出字段

day_id,sale_nbr,,cnt,round

日期编号,卖出方代码,数量,金额

   (2)统计每天各个代理商的销售数量和销售金额。

要求的输出字段

day_id,sale_nbr,,cnt,round

日期编号,卖出方代码,数量,金额

(3)统计每天各个代理商的销售活跃度。

要求的输出字段

day_id,sale_nbr, sale_number

日期编号,卖出方代码,交易次数(买入或者卖出均算交易次数)

(4)汇总统计9月1日到9月15日之间各个代理商的销售利润。

编号,卖出方代码,买入数量,买入金额,卖出数量,卖出金额,销售利润(卖出金额-买入金额)

      (5)设计分析代理商的市场地位根据市场交易次数、交易对象个数、销售机票数量、销售利润等。(选做题)

4、处理结果入库:

   将上述统计分析的结果数据保存到mySQL数据库中。

5、数据可视化展示:

   利用Echarts将上述统计结果以图形化展示的方式展现出来:饼图、柱状图、地图、折线图等。

 

首先是数据的清洗。我使用的是pyspark的操作。

# coding:utf8
from pyspark.sql import SparkSession
from pyspark.sql.functions import concat, expr, col
from pyspark.sql.types import StructType, StringType, IntegerType
from pyspark.sql import functions as F

if __name__ == '__main__':
    spark = SparkSession.builder.appName("test").master("local[*]").config("spark.sql.shuffle.partitions",2).getOrCreate()
    sc = spark.sparkContext

以上是用于创建一个SparkSession对象和SparkContext对象,用于在Python中使用Apache Spark进行数据处理和分析。

 #读取数据
    df = spark.read.format("csv").\
        option("sep",",").\
        option("header",True).\
        load("../data/input/sql/input/sales_sample_20170310.csv")

以上是读取数据。

df1=df.withColumn("date_column", expr("date_add(to_date('2023-09-01'), CAST(day_id AS INT) - 1)"))

以上是拼接字符串。

 df1.createTempView("test")
    df2=spark.sql("select date_column,sale_nbr,sum(cnt) as cnt,sum(round) as round from test where sale_nbr like 'C%' group by date_column, sale_nbr")
    df2.show()

然后使用spark sql模式建立视图,进行数据统计查看是否符合需求。

    df2.write.mode("overwrite").\
        format("jdbc").\
        option("url","jdbc:mysql://你当前的ipv4:3306/book?useSSL=false&useUnicode=true&allowPublicKeyRetrieval=true&serverTimezone=UTC").\
        option("dbtable","test1").\
        option("user","root").\
        option("password","020907").\
        save()

最后就是写入mysql,这样就完成了需求一。

下面是需求二

df1.createTempView("test")
    df2=spark.sql("select date_column,sale_nbr,sum(cnt) as cnt,sum(round) as round from test where sale_nbr like 'O%' group by date_column, sale_nbr")
    df2.show()

需求三

    df1.createTempView("test3")
    df2= spark.sql("select date_column,sale_nbr,count(*) as sale_number from test3 day_id where sale_nbr like 'O%' group by sale_nbr,date_column")
    df2.show()

需求四

df1.createTempView("spark")
    df2 = spark.sql("select date_column,sale_nbr,sum(cnt) as cnt_x,sum(round) as round_x  from spark where  sale_nbr like 'O%' and  date_column > '2023-09-01' and date_column < '2023-09-15' group by date_column,sale_nbr")
    df2.show()
    df3=spark.sql("select date_column,buy_nbr,sum(cnt) as cnt_y,sum(round) as round_y  from spark where  buy_nbr like 'O%' and  date_column > '2023-09-01' and date_column < '2023-09-15' group by date_column,buy_nbr")
    df3.show()
    joined_df = df2.join(df3, (df2.date_column == df3.date_column) & (df2.sale_nbr == df3.buy_nbr), 'inner')

    # Calculate the round difference
    result_df = joined_df.select(df2.date_column, df2.sale_nbr, (df2.round_x - df3.round_y).alias('round_difference'))

    # Show the resulting dataframe
    result_df.show()
    result_df.write.mode("overwrite").\
        format("jdbc").\
        option("url","jdbc:mysql://10.99.113.200:3306/book?useSSL=false&useUnicode=true&allowPublicKeyRetrieval=true&serverTimezone=UTC").\
        option("dbtable","test5").\
        option("user","root").\
        option("password","020907").\
        save()

之后是javaweb实现数据可视化。

 

 

 

posted @ 2023-09-22 18:37  一个小虎牙  阅读(6)  评论(0编辑  收藏  举报