开发环境SPARK 和数据需要分别写入本文件
时间: 2024-01-23 17:03:52 浏览: 143
好的,我明白了。那么我将为你提供解决方案。
首先,你需要在本地创建两个文件,一个用于存放表格1的内容,另一个用于存放表格2的内容。文件的格式如下:
表格1文件(table1.txt):
```
Pad 1 999
Workstation 2 25300
Workstation 2 25300
Workstation 38 13130
Workstation 38 13130
SSD 1 1060
TPC 40 2865
Workstation 38 13130
```
表格2文件(table2.txt):
```
Computer 2 9900
HD 1 535
PC 3 3600
PC 2 2800
Computer 2 9900
HD 1 535
Workstation 38 13130
```
接下来,你可以使用以下 Scala 代码来实现你的需求:
```scala
import org.apache.spark.sql.SparkSession
object MergeTables {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder()
.appName("MergeTables")
.getOrCreate()
// 读取表格1和表格2
val table1 = spark.read
.option("header", "false")
.option("delimiter", " ")
.option("inferSchema", "true")
.csv("/path/to/table1.txt")
.toDF("Device", "Num", "Price")
val table2 = spark.read
.option("header", "false")
.option("delimiter", " ")
.option("inferSchema", "true")
.csv("/path/to/table2.txt")
.toDF("Device", "Num", "Price")
// 合并表格1和表格2
val mergedTable = table1.union(table2)
.groupBy("Device")
.sum("Num", "Price")
.withColumnRenamed("sum(Num)", "Num")
.withColumnRenamed("sum(Price)", "Price")
// 输出文件1
mergedTable.write
.option("header", "false")
.option("delimiter", " ")
.csv("/path/to/q3_out1_学号")
// 输出文件2
val totalAmount = mergedTable.withColumn("Amount", $"Num" * $"Price")
.selectExpr("sum(Amount) as TotalAmount")
.first()
.getLong(0)
import java.io.PrintWriter
val writer = new PrintWriter("/path/to/q3_out2_学号")
writer.println(s"Total amount: $totalAmount")
writer.close()
spark.stop()
}
}
```
其中,`/path/to` 是你存放表格1和表格2文件的路径,`学号` 需要替换成你的学号。
然后,你需要使用 sbt 打包上述程序。首先,在项目根目录下创建一个 build.sbt 文件,并添加以下内容:
```scala
name := "MergeTables"
version := "1.0"
scalaVersion := "2.12.10"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.5"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.5"
```
然后,在项目根目录下创建一个 src/main/scala 目录,并将上述 Scala 代码保存为 MergeTables.scala 文件。
最后,在项目根目录下执行以下命令进行打包:
```
sbt package
```
打包完成后,你可以使用以下命令执行生成的 jar 文件:
```
spark-submit --class MergeTables target/scala-2.12/mergetables_2.12-1.0.jar
```
执行完成后,你将在 `/path/to` 目录下看到生成的输出文件 q3_out1_学号 和 q3_out2_学号。
阅读全文