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())

  }

}

运行结果

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值