有键值对(spark”20),(“hadoop'40),(“ hive,65),(spark,50),(“hive60),其中ke表示图书名称,value表示每周(一周按7天算)的图书销量,请结合使用reducebykey0和mapvalues0等算子,根据给定的数组计算出每个图书的平均日销量
时间: 2024-02-25 13:57:49 浏览: 70
好的,下面是Spark程序的代码:
```scala
import org.apache.spark.sql.SparkSession
object AverageDailySales {
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.appName("AverageDailySales")
.getOrCreate()
val data = spark.sparkContext.parallelize(Seq(("spark", 20), ("hadoop", 40), ("hive", 65), ("spark", 50), ("hive", 60)))
.reduceByKey(_ + _)
.mapValues(_ / 7.0)
data.collect().foreach(println)
spark.stop()
}
}
```
这段代码将图书名称和销量作为键值对,使用parallelize方法创建了一个RDD。接着,我们使用reduceByKey方法按照图书名称将销量进行相加。最后,使用mapValues方法将每个图书的销量除以7,得到每个图书的平均日销量。
将上述代码保存为AverageDailySales.scala文件后,我们可以使用以下命令编译和运行程序:
```shell
$ spark-submit --class AverageDailySales --master yarn AverageDailySales.jar
```
其中,AverageDailySales.jar是我们打包好的程序包。这样,程序就会在虚拟机上运行,并计算出每个图书的平均日销量。
阅读全文