Hadoop+Spark大数据技术(测试)

1、九九乘法表

在下面的单元格中编写Scala程序,输出上三角形的九九乘法表,并运行。

for (i <- 1 to 9 reverse) {
  for (j <- 1 to i) {
    print(s"$j x $i = ${i * j}\t")
  }
  println()
}

2、单词计数

在下面的若干单元格中编写Spark程序,对test.txt中的单词计数,并输出统计结
果。
test.txt的内容为下面三行:
Life would be too smooth if it had no rubs in it
Life is the art of drawing sufficient conclusions form insufficient premises
The wealth of the mind is the only wealth

import org.apache.spark.sql.SparkSession

object WordCount {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName("WordCount")
      .getOrCreate()

    val textFile = spark.sparkContext.textFile("test.txt")
    val words = textFile.flatMap(_.split("\\W+"))
    val wordCounts = words.map(word => (word, 1)).reduceByKey(_ + _)

    wordCounts.foreach(println)

    spark.stop()
  }
}

// 程序入口点
WordCount.main(Array())

3、DataFrame

在下面的若干单元格中编写Spark程序,利用grade.csv创建Spark SQL DataFrame。

header参数:用于指示csv文件中是否包含标题行。如果设置为True,则SPamk会券试将第一行作为列名使用。

inferSchema参数:如果设置为True,Spark会自动尝试推断每列的数据类型。

(1)统计行数。
(2)筛选Python,Java,scala都不低手85的行。

(3)分班级统计各门课程的平均分。

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._

object GradeAnalysis {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName("GradeAnalysis")
      .getOrCreate()

    // 加载CSV文件并创建DataFrame
    val gradeDF = spark.read
      .option("header", "true") // 指示CSV文件中包含标题行
      .option("inferSchema", "true") // 自动推断列的数据类型
      .csv("grade.csv")

    // (1) 统计行数
    val rowCount = gradeDF.count()
    println(s"Total number of rows: $rowCount")

    // (2) 筛选Python, Java, Scala成绩都不低于85的行
    val highAchievers = gradeDF.filter(
      (col("Python") >= 85) &&
      (col("Java") >= 85) &&
      (col("Scala") >= 85)
    )
    println("Students with grades above 85 in all three subjects:")
    highAchievers.show()

    // (3) 分班级统计各门课程的平均分
    val classAverages = gradeDF.groupBy("Class")
      .agg(
        mean("Python").as("Python_Avg"),
        mean("Java").as("Java_Avg"),
        mean("Scala").as("Scala_Avg")
      )
    println("Class averages for each subject:")
    classAverages.show()

    spark.stop()
  }
}

4、Graphx属性图

在下面的若干单元格中编写Spark程序,利用下图创建Graphx属性图,并完成:

(1)输出图的顶点信息和边信息。

(2)找出属性为PI的边 。

(3)找出属性为professor的顶点。

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.graphx.{Edge, Graph, VertexId}
import org.apache.spark.rdd.RDD

object GraphXExample {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("GraphX Example")
    val sc = new SparkContext(conf)

    // 假设的顶点数据
    val vertices: RDD[(VertexId, (String, String))] = sc.parallelize(Seq(
      (1L, ("Alice", "student")),
      (2L, ("Bob", "student")),
      (3L, ("Charlie", "professor"))
      // 添加更多顶点...
    ))

    // 假设的边数据
    val edges: RDD[Edge[(String, String)]] = sc.parallelize(Seq(
      Edge(1L, 3L, ("enrolled", "CS101")),
      Edge(2L, 3L, ("enrolled", "CS102")),
      // 添加更多边...
    ))

    // 创建GraphX的Graph对象
    val graph = Graph(vertices, edges)

    // (1) 输出图的顶点信息和属性
    println("Vertices and their attributes:")
    graph.vertices.collect().foreach {
      case (vid, (name, attr)) => println(s"Vertex $vid: Name = $name, Attribute = $attr")
    }

    // (2) 输出属性为"enrolled"的边
    println("\nEdges with 'enrolled' attribute:")
    graph.edges.filter(e => e.attr._1 == "enrolled").collect().foreach {
      case Edge(src, dst, attr) => println(s"Edge from Vertex $src to $dst with Attribute = $attr")
    }

    // (3) 输出属性为"professor"的顶点
    println("\nVertices with 'professor' attribute:")
    graph.vertices.filter { case (_, (_, attr)) => attr == "professor" }.collect().foreach {
      case (vid, (_, _)) => println(s"Vertex $vid is a professor")
    }

    sc.stop()
  }
}

// 运行程序
GraphXExample.main(Array())

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值