每日总结
今日进行了测试
数据清洗:
要求将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实现数据可视化。