12.28 Spark初级编程实践

1.实验目的

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

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

2.实验平台

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

2Spark版本:2.4.0

3Hadoop版本:3.1.3

3.实验步骤

1Spark读取文件系统的数据

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

val localFile = sc.textFile("/home/hadoop/test.txt")

val lineCount = localFile.count()

println(s"文件行数: $lineCount")

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

val hdfsFile = sc.textFile("hdfs://localhost:9000/user/hadoop/test.txt")

val hdfsLineCount = hdfsFile.count()

println(s"HDFS文件行数: $hdfsLineCount")

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

import org.apache.spark.sql.SparkSession

 

object CountLines {

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

    val spark = SparkSession.builder.appName("Count Lines").getOrCreate()

    val hdfsFile = spark.sparkContext.textFile("hdfs://localhost:9000/user/hadoop/test.txt")

    val lineCount = hdfsFile.count()

    println(s"HDFS文件行数: $lineCount")

    spark.stop()

  }

}

 

sbt package

spark-submit --class CountLines target/scala-2.12/your-jar-name.jar

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

对于两个输入文件AB,编写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

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

20170101    x

20170101    y

20170102    y

20170103    x

20170104    y

20170104    z

20170105    y

20170105    z

20170106    z

import org.apache.spark.sql.SparkSession

 

object RemoveDuplicates {

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

    val spark = SparkSession.builder.appName("Remove Duplicates").getOrCreate()

    

    val fileA = spark.sparkContext.textFile("hdfs://localhost:9000/user/hadoop/fileA.txt")

    val fileB = spark.sparkContext.textFile("hdfs://localhost:9000/user/hadoop/fileB.txt")

    

    val combined = fileA.union(fileB).distinct().sortBy(line => line.split("\t")(0))

    

    combined.saveAsTextFile("hdfs://localhost:9000/user/hadoop/outputC.txt")

    

    spark.stop()

  }

}

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.sql.SparkSession

 

object CalculateAverage {

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

    val spark = SparkSession.builder.appName("Calculate Average").getOrCreate()

    

    val files = List("hdfs://localhost:9000/user/hadoop/Algorithm.txt",

                     "hdfs://localhost:9000/user/hadoop/Database.txt",

                     "hdfs://localhost:9000/user/hadoop/Python.txt")

    

    val scores = spark.sparkContext.textFile(files.mkString(","))

      .map(line => {

        val parts = line.split(" ")

        (parts(0), parts(1).toDouble)

      })

    

    val totalScores = scores

      .groupByKey()

      .mapValues(scores => scores.sum / scores.size)

    

    totalScores.saveAsTextFile("hdfs://localhost:9000/user/hadoop/average_scores.txt")

    

    spark.stop()

  }

}

posted @     阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示