有一个销售数据的数据集,包含的属性有,门店所在的城市,销售的渠道线上线下,客户性别,客户年龄段,产品类别,客户数量,销售金额,订单数量,购买的产品数量,产品的成本,产品的单价构成,用Spark对该数据集进行深度的数据分析,将代码呈现出来
时间: 2024-05-06 22:14:53 浏览: 170
好的,以下是一个基于Spark的数据分析代码,可以对销售数据集进行深度的数据分析。需要注意的是,代码中的数据集路径和格式需要根据实际情况进行修改。
```scala
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
object SalesAnalysis {
def main(args: Array[String]): Unit = {
// 创建SparkSession
val spark = SparkSession.builder()
.appName("Sales Analysis")
.master("local[*]")
.getOrCreate()
// 读取数据集
val salesData = spark.read
.option("header", "true")
.option("inferSchema", "true")
.csv("path/to/sales/data.csv")
// 数据预处理
val salesDataClean = salesData
// 过滤掉空值
.na.drop()
// 计算利润率
.withColumn("profit_rate", (col("sales_amount") - col("product_cost")) / col("sales_amount"))
// 将客户数量和订单数量转换为整型
.withColumn("customer_num", col("customer_num").cast("int"))
.withColumn("order_num", col("order_num").cast("int"))
// 数据分析
// 1. 统计不同城市的销售额和利润
val citySalesProfit = salesDataClean
.groupBy("city")
.agg(sum("sales_amount").as("total_sales"), sum("product_cost").as("total_cost"), sum("sales_amount") - sum("product_cost").as("total_profit"))
.orderBy(desc("total_sales"))
citySalesProfit.show()
// 2. 统计不同渠道的销售额和利润
val channelSalesProfit = salesDataClean
.groupBy("channel")
.agg(sum("sales_amount").as("total_sales"), sum("product_cost").as("total_cost"), sum("sales_amount") - sum("product_cost").as("total_profit"))
.orderBy(desc("total_sales"))
channelSalesProfit.show()
// 3. 统计不同年龄段和性别的销售额和利润
val ageGenderSalesProfit = salesDataClean
.groupBy("age_range", "gender")
.agg(sum("sales_amount").as("total_sales"), sum("product_cost").as("total_cost"), sum("sales_amount") - sum("product_cost").as("total_profit"))
.orderBy(desc("total_sales"))
ageGenderSalesProfit.show()
// 4. 统计不同产品类别的销售额和利润
val productSalesProfit = salesDataClean
.groupBy("product_category")
.agg(sum("sales_amount").as("total_sales"), sum("product_cost").as("total_cost"), sum("sales_amount") - sum("product_cost").as("total_profit"))
.orderBy(desc("total_sales"))
productSalesProfit.show()
// 5. 统计不同客户数量的销售额和利润
val customerNumSalesProfit = salesDataClean
.groupBy("customer_num")
.agg(sum("sales_amount").as("total_sales"), sum("product_cost").as("total_cost"), sum("sales_amount") - sum("product_cost").as("total_profit"))
.orderBy(desc("total_sales"))
customerNumSalesProfit.show()
// 6. 统计不同订单数量的销售额和利润
val orderNumSalesProfit = salesDataClean
.groupBy("order_num")
.agg(sum("sales_amount").as("total_sales"), sum("product_cost").as("total_cost"), sum("sales_amount") - sum("product_cost").as("total_profit"))
.orderBy(desc("total_sales"))
orderNumSalesProfit.show()
// 7. 统计不同产品数量的销售额和利润
val productNumSalesProfit = salesDataClean
.groupBy("product_num")
.agg(sum("sales_amount").as("total_sales"), sum("product_cost").as("total_cost"), sum("sales_amount") - sum("product_cost").as("total_profit"))
.orderBy(desc("total_sales"))
productNumSalesProfit.show()
// 8. 统计不同利润率的销售额和利润
val profitRateSalesProfit = salesDataClean
.groupBy("profit_rate")
.agg(sum("sales_amount").as("total_sales"), sum("product_cost").as("total_cost"), sum("sales_amount") - sum("product_cost").as("total_profit"))
.orderBy(desc("total_sales"))
profitRateSalesProfit.show()
// 关闭SparkSession
spark.stop()
}
}
```
该代码使用Spark对销售数据集进行了深度的数据分析,包括不同城市、渠道、年龄段、性别、产品类别、客户数量、订单数量、产品数量和利润率等方面的统计分析。代码中使用了SparkSQL和DataFrame API进行数据处理和分析,并使用了常用的聚合函数进行数据统计。
阅读全文