Spark编程实现简例

对于两个输入文件AB,编写Spark独立应用程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新文件C下面是输入文件和输出文件的一个样例,供参考。

输入文件A的样例如下:

20170101    x

20170102    y

20170103    x

20170104    y

20170105    z

20170106    z

输入文件B的样例如下:

20170101    y

20170102    y

20170103    x

20170104    z

20170105    y

根据输入的文件AB合并得到的输出文件C的样例如下:

20170101    x

20170101    y

20170102    y

20170103    x

20170104    y

20170104    z

20170105    y

20170105    z

        20170106    z

(1)已知数据文件AB均在HDFS上。

(2)结果保存到MySql中,请设计结果表,并完整写出源码。

(3)将所有功能整合的一个客户端程序中

环境说明

IDEA 2022.2.3

Vmware

Hadoop 2.7.7

Spark 3.1.3

源码

将数据文件上传至hdfs:

@Before

public void init() throws IOException {

    Configuration conf = new Configuration();

    conf.set("fs.defaultFS", "hdfs://master1:9000");

    System.setProperty("HADOOP_USER_NAME", "root");

    hdfs = FileSystem.get(conf);

}

@After

public void close() throws IOException {

    if (hdfs != null) {

        hdfs.close();

    }

}

@Test

public void testUploadFileToHDFS() throws IOException {

    final String localFilePath = "e:/HDFS/A.txt";

    final String hdfsFilePath = "/RDD/output/A.txt";

    try (FileSystem hdfs = FileSystem.get(new Configuration())) {

        Path src = new Path(localFilePath);

        Path dst = new Path(hdfsFilePath);

        hdfs.copyFromLocalFile(src, dst);

        System.out.println("上传成功");

    } catch (IOException e) {

        e.printStackTrace();

    }

}}

合并:

import org.apache.spark.sql.SparkSession

object Main {

  def main(args: Array[String]) {

    val spark = SparkSession.builder.appName("MergeAndSaveToMySQL").getOrCreate()

   

    // 读取输入文件A和B,并为每个字段指定别名

    val inputA = spark.read.text("/user/your_username/RDD/output/A.txt")

      .selectExpr("value as id", "substring(value, 11, 1) as name") // 指定日期和字母字段

    val inputB = spark.read.text("/user/your_username/RDD/output/B.txt")

      .selectExpr("value as id", "substring(value, 11, 1) as name") // 指定日期和字母字段

   

    // 合并两个数据集

    val mergedData = inputA.union(inputB)

   

    // 将结果保存到MySQL中

    mergedData.write.format("jdbc")

      .option("url", "jdbc:mysql://localhost:3306/myBase")

      .option("dbtable", "result")

      .option("user", "root")

      .option("password", "123456")

      .save()

   

    spark.stop()

  }

}

object MainClient {

  def main(args: Array[String]): Unit = {

    MergeAndDeduplicate.main(Array())

  }

}

运行结果

Spark编程实现简例_第1张图片

Spark编程实现简例_第2张图片

Spark编程实现简例_第3张图片

Spark编程实现简例_第4张图片

Spark编程实现简例_第5张图片

Spark编程实现简例_第6张图片

你可能感兴趣的:(spark,大数据,分布式)