编写 Scala 独立应用程序: Pad 1 999 Workstation 2 25300 Workstation 2 25300 Workstation 38 13130 Workstation 38 13130 SSD 1 1060 TPC 40 2865 Workstation 38 13130 Computer 2 9900 HD 1 535 PC 3 3600 PC 2 2800 Computer 2 9900 HD 1 535 Workstation 38 13130 输出文件 1 格式: Computer 2 9900 … 输出文件 2 格式: TPC,114600 … 1) 将上面两张表的内容分别写入两个本地文件,三列分别为设备名、设备数量和单价 2) 从本地文件读入数据,实现去重合并,输出结果的行数,并将结果写入本地文件, 目录命名为“q3_out1_学号” 3) 计算合并后的表数据各项总金额(Num × Price),将结果写入本地文件,目录 “q3_out2_学号”; 4) 使用 sbt 打包上述程序; 5) 通过 spark-submit 执行生成的 jar,查看运行结果。
时间: 2024-01-20 18:04:46 浏览: 92
好的,我明白了您的要求。下面是针对您的问题的解答:
1. 将数据写入本地文件
您可以使用以下代码将数据写入两个本地文件:
```scala
import java.io._
val data1 = List("Pad 1 999", "Workstation 2 25300", "Workstation 2 25300", "Workstation 38 13130", "Workstation 38 13130", "SSD 1 1060", "TPC 40 2865", "Workstation 38 13130", "Computer 2 9900", "HD 1 535", "PC 3 3600", "PC 2 2800", "Computer 2 9900", "HD 1 535", "Workstation 38 13130")
val data2 = List("TPC 114600", "HD 4825", "Computer 19800", "Pad 999", "Workstation 50600")
val file1 = new File("path/to/file1.txt")
val file2 = new File("path/to/file2.txt")
val bw1 = new BufferedWriter(new FileWriter(file1))
val bw2 = new BufferedWriter(new FileWriter(file2))
for (line <- data1) {
bw1.write(line)
bw1.newLine()
}
for (line <- data2) {
bw2.write(line)
bw2.newLine()
}
bw1.close()
bw2.close()
```
请将 `path/to/file1.txt` 和 `path/to/file2.txt` 替换为您想要保存文件的路径。
2. 去重合并并写入本地文件
您可以使用以下代码实现去重合并并将结果写入本地文件:
```scala
import scala.io.Source
val file1 = Source.fromFile("path/to/file1.txt")
val file2 = Source.fromFile("path/to/file2.txt")
val data1 = file1.getLines().toList
val data2 = file2.getLines().toList
file1.close()
file2.close()
val mergedData = (data1 ++ data2)
.map(line => {
val fields = line.split(' ')
(fields(0), fields(1).toInt, fields(2).toInt)
})
.groupBy(_._1)
.mapValues(_.map(row => (row._2, row._3)).reduce((a, b) => (a._1 + b._1, a._2)))
.toList
.sortBy(_._1)
val out1File = new File("q3_out1_学号")
val bw = new BufferedWriter(new FileWriter(out1File))
for (line <- mergedData) {
bw.write(s"${line._1} ${line._2._1} ${line._2._2}")
bw.newLine()
}
bw.close()
val result1 = mergedData.length
```
请将 `q3_out1_学号` 替换为您想要保存结果的文件名,并将 `学号` 替换为您的学号。
3. 计算各项总金额并写入本地文件
您可以使用以下代码计算各项总金额并将结果写入本地文件:
```scala
val result2 = mergedData.map(line => line._2._1 * line._2._2).sum
val out2File = new File("q3_out2_学号")
val bw = new BufferedWriter(new FileWriter(out2File))
bw.write(result2.toString)
bw.close()
```
请将 `q3_out2_学号` 替换为您想要保存结果的文件名,并将 `学号` 替换为您的学号。
4. 使用 sbt 打包
您可以使用以下命令使用 sbt 打包您的程序:
```
sbt package
```
生成的 jar 文件位于 `target/scala-2.12/` 目录下。
5. 使用 spark-submit 执行程序
您可以使用以下命令使用 spark-submit 执行您的程序:
```
spark-submit --class Main --master local[2] path/to/jar/file path/to/file1.txt path/to/file2.txt
```
请将 `Main` 替换为您打包后程序的主类名,将 `path/to/jar/file` 替换为您的 jar 文件路径,将 `path/to/file1.txt` 和 `path/to/file2.txt` 替换为您之前保存数据的文件路径。
阅读全文