首页 > 其他分享 >12.21

12.21

时间:2025-01-14 20:01:21浏览次数:1  
标签:文件 12.21 hadoop apache sc import spark

1.实验目的

(1)掌握使用Spark访问本地文件和HDFS文件的方法

(2)掌握Spark应用程序的编写、编译和运行方法

2.实验平台

(1)操作系统:Ubuntu18.04(或Ubuntu16.04);

(2)Spark版本:2.4.0;

(3)Hadoop版本:3.1.3。

3.实验步骤

(1)Spark读取文件系统的数据

(1)在spark-shell中读取Linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数;

(2)在spark-shell中读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;

(3)编写独立应用程序(推荐使用Scala语言),读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;通过sbt工具将整个应用程序编译打包成 JAR包,并将生成的JAR包通过 spark-submit 提交到 Spark 中运行命令。

源代码:

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

public class FileLineCounter {
    public static void main(String[] args) {
        SparkConf conf = new SparkConf().setAppName("File Line Counter").setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);

        // 读取HDFS文件
        String filePath = "hdfs://node1:8020/user/hadoop/test.txt";
        JavaRDD<String> lines = sc.textFile(filePath);

        // 统计文件行数
        long lineCount = lines.count();
        System.out.println("文件总行数: " + lineCount);

        sc.close();
    }
}

 

 

 

 

(2)编写独立应用程序实现数据去重

对于两个输入文件A和B,编写Spark独立应用程序(推荐使用Scala语言),对两个文件进行合并,并剔除其中重复的内容,得到一个新文件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

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

20170101    x

20170101    y

20170102    y

20170103    x

20170104    y

20170104    z

20170105    y

20170105    z

20170106    z

源代码:

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

public class FileDeduplicator {
    public static void main(String[] args) {
        SparkConf conf = new SparkConf().setAppName("File Deduplicator").setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);

        // 读取文件A和文件B
        String fileA = "hdfs://node1:8020/user/hadoop/fileA.txt";
        String fileB = "hdfs://node1:8020/user/hadoop/fileB.txt";

        JavaRDD<String> rddA = sc.textFile(fileA);
        JavaRDD<String> rddB = sc.textFile(fileB);

        // 合并文件并去重
        JavaRDD<String> mergedRDD = rddA.union(rddB).distinct();
        mergedRDD.saveAsTextFile("hdfs://node1:8020/user/hadoop/outputC");

        System.out.println("去重后的数据已保存到HDFSoutputC目录");
        sc.close();
    }
}

 

 

 

(3)编写独立应用程序实现求平均值问题

每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写Spark独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。下面是输入文件和输出文件的一个样例,供参考。

Algorithm成绩:

小明 92

小红 87

小新 82

小丽 90

Database成绩:

小明 95

小红 81

小新 89

小丽 85

Python成绩:

小明 82

小红 83

小新 94

小丽 91

平均成绩如下:

(小红,83.67)

(小新,88.33)

(小明,89.67)

(小丽,88.67)

源代码:

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import scala.Tuple2;

import java.util.Arrays;

public class AverageScoreCalculator {
    public static void main(String[] args) {
        SparkConf conf = new SparkConf().setAppName("Average Score Calculator").setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);

        // 读取各科成绩文件
        String[] filePaths = {
                "hdfs://node1:8020/user/hadoop/Algorithm.txt",
                "hdfs://node1:8020/user/hadoop/Database.txt",
                "hdfs://node1:8020/user/hadoop/Python.txt"
        };

        JavaRDD<String> allScores = sc.emptyRDD();
        for (String path : filePaths) {
            allScores = allScores.union(sc.textFile(path));
        }

        // 解析数据并计算平均值
        JavaPairRDD<String, Tuple2<Integer, Integer>> studentScores = allScores.mapToPair(line -> {
            String[] parts = line.split(" ");
            return new Tuple2<>(parts[0], new Tuple2<>(Integer.parseInt(parts[1]), 1));
        });

        JavaPairRDD<String, Tuple2<Integer, Integer>> aggregatedScores = studentScores.reduceByKey((x, y) ->
                new Tuple2<>(x._1 + y._1, x._2 + y._2)
        );

        JavaPairRDD<String, Double> averageScores = aggregatedScores.mapValues(x -> x._1 * 1.0 / x._2);

        // 保存结果到HDFS
        averageScores.saveAsTextFile("hdfs://node1:8020/user/hadoop/AverageScores");

        System.out.println("学生平均成绩已保存到HDFSAverageScores目录");
        sc.close();
    }
}

标签:文件,12.21,hadoop,apache,sc,import,spark
From: https://www.cnblogs.com/szm123/p/18671479

相关文章

  • 12.21
    实验2  熟悉常用的HDFS操作  1.实验目的(1)理解HDFS在Hadoop体系结构中的角色;(2)熟练使用HDFS操作常用的Shell命令;(3)熟悉HDFS操作常用的JavaAPI。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);(2)Hadoop版本:3.1.3;(3)JDK版本:1.8;(4)JavaIDE:Eclipse。3.实验步骤(一......
  • 12.21考试总结
    分数题号T1T2T3T4T5T6T7总分分数1001001002010010064584分析T1模板,讲烂了点击查看代码#include<bits/stdc++.h>#defineintlonglong#defineendl"\n"usingnamespacestd;constintmaxn=1e6+5,mod=1e9+7,inf=1e18;intn,a[maxn],dp[m......
  • 12.21
    软件构造课进入了关键的代码优化阶段,看着自己之前写的略显粗糙的代码,我意识到自己在编程技巧上还有很大的提升空间。习思课上,老师对上次的作业进行了点评,指出了我在语法和逻辑表达上的问题,我认真地做着笔记,暗暗发誓下次一定要取得进步。人机交互课上,小组讨论的氛围异常热烈,大家对......
  • 2024.12.21 周六
    2024.12.21周六Q1.1000Lottery"ThreeSevens"washeldfor$m$days.Onday$i$,$n_i$peoplewiththenumbers$a_{i,1},\ldots,a_{i,n_i}$participatedinthelottery.Itisknownthatineachofthe$m$days,onlyonewinnerwasselectedf......
  • 24.12.21
    回来第一场打成屎了\(\tiny-1\)A大胆猜测在\(n\)足够大时一定可以把\(y\)与成\(0\),那么就只需最大化\(x\)(NT:绿题不到)。那么\(n\)什么时候足够大呢?任取\(3\)个数,那么每一位都至少有一种消掉它的方法,因此如果现在还剩\(k\)位,就一定可以选出两个数消掉\(\lceilk/......
  • 2024.12.16~2024.12.21
    2024.12.16听说有人拿我的博客当乐子看,我想说,乐子人看什么都是乐子。。。所以我是否要将博客写的幽默深刻一点呢?我觉得也不是不行,但可能没有那个能力早上起床听到闹钟没有起来,心里想着:起床需要爆发力,睡一会再重启,然后我又成功的晚起了。。。上午非常好啊,就是被一道单调队列优......
  • 大二打卡(12.21)
    uml作业:实现视图建模:(1)分析系统用例流程中对象间的交互“校园卡管理系统”包括“充值消费子系统”、“身份识别门禁子系统”、“校方卡片授权信息管理子系统”等。[用例流程描述]充值消费子系统:用户通过界面输入个人信息和充值金额,提交充值申请。系统验证用户身份和账户信息......
  • KubeSphere 社区双周报 | 2023.12.21-2024.01.04
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2023.12.21-2024.01.04。贡献者名单新晋KubeSpherecon......
  • 12.21
          实验7Spark初级编程实践 1.实验目的(1)掌握使用Spark访问本地文件和HDFS文件的方法(2)掌握Spark应用程序的编写、编译和运行方法2.实验平台(1)操作系统:Ubuntu18.04(或Ubuntu16.04);(2)Spark版本:2.4.0;(3)Hadoop版本:3.1.3。3.实验步骤(1)Spark读取文件系统的数据 ......
  • 12.21每日报告
    今天早上考完了试设计模式 最后一题适配器模式写成了观察者还是没看清题题中说明不改变原有代码的基础上,所以不应该是观察者是给他调用猫的接口所以应该是适配器模式,将一个接口转换成用户所希望的另一个接口,将原本不兼容的类一起工作晚上做软件构造的大实验学习JFinal......