让我为你逐步解释这段Spark代码的执行过程和中间结果: 1. 初始RDD:`bookRDD` ``` [("spark", 2), ("hadoop", 6), ("hadoop", 4), ("spark", 6)] ``` 这是一个包含书籍名称和销售数量的键值对RDD 2. 第一步:`map(lambda x: (x[0], (x[1], 1)))` 这个转换将每个元素转换为(书籍名称, (销售数量, 1))的形式 中间结果: ``` [("spark", (2, 1)), ("hadoop", (6, 1)), ("hadoop", (4, 1)), ("spark", (6, 1))] ``` 3. 第二步:`reduceByKey(lambda x, y : (x[0] + y[0], x[1] + y[1]))` 这个转换按书籍名称进行分组,对每组数据执行求和操作: - 第一个元素(销售数量)累加 - 第二个元素(计数)累加 中间结果: ``` [("spark", (8, 2)), ("hadoop", (10, 2))] ``` 解释: - "spark"的总销量是2+6=8,共销售2次 - "hadoop"的总销量是6+4=10,共销售2次 4. 第三步:`map(lambda x : (x[0], x[1][0] / x[1][1]))` 这个转换计算每本书的平均销量(总销量/销售次数) 最终结果: ``` [("spark", 4.0), ("hadoop", 5.0)] ``` 解释: - "spark"的平均销量是8/2=4.0 - "hadoop"的平均销量是10/2=5.0 最后,`saleRDD.foreach(print)`会打印出最终计算得到的每本书的平均销量。

视频信息