一位顾客依次点了红烧茄子、京酱肉丝和剁椒鱼头共3个菜,为实时计算顾客点餐的费用,请使用scala的Spark Streaming编程完成以下操作。 (1)在master虚拟机上启动8888端口。 (2)使用Spark Streaming连接master虚拟机的8888端口,并实时统计顾客点餐的总费用。 (3)启动Spark Streaming程序,在8888端口输入顾客所点的菜单数据,如“3红烧茄子15”,查看顾客本次点餐的总费用。 代码:
时间: 2023-12-10 07:41:47 浏览: 204
```scala
import org.apache.spark._
import org.apache.spark.streaming._
import org.apache.spark.streaming.StreamingContext._
object Restaurant {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("Restaurant")
val ssc = new StreamingContext(conf, Seconds(1))
val lines = ssc.socketTextStream("localhost", 8888)
val menu = lines.map(l => {
val items = l.split(" ")
val dish = items(1)
val price = items(2).toInt
(dish, price)
})
val totalCost = menu.reduceByKey(_ + _)
totalCost.print()
ssc.start()
ssc.awaitTermination()
}
}
```
在终端中执行以下命令启动程序:
```
$ spark-submit --class Restaurant --master local[*] restaurant.jar
```
然后在另一个终端中输入以下命令模拟顾客点餐:
```
$ nc localhost 8888
3 红烧茄子 15
2 京酱肉丝 20
1 剁椒鱼头 30
```
程序会实时计算并输出顾客点餐的总费用。
阅读全文