zoukankan      html  css  js  c++  java
  • 寒假学习第十二天

    ‘今天做了实验五

    编程实现将 RDD 转换为 DataFrame
    源文件内容如下(包含 id,name,age):
    1,Ella,36
    2,Bob,29
    3,Jack,29
    请将数据复制保存到 Linux 系统中,命名为 employee.txt,实现从 RDD 转换得到
    DataFrame,并按“id:1,name:Ella,age:36”的格式打印出 DataFrame 的所有数据。请写出程序代
    码。
    代码如下:

    object RDD2DataFrameReflection extends App {

    val conf = new SparkConf()
    .setAppName("RDD2DataFrameReflection")
    .setMaster("local")
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)

    //在scala中使用反射方式,进行RDD到DataFrame的转换,需要手动导入一个隐式转换
    import sqlContext.implicits._

    case class Student(id:Int,name:String,age:Int)

    //这里其实就是一个普通的,元素为case class的RDD
    //直接对它使用toDF()方法,即可转换为DataFrame
    val studentDF = sc.textFile("./data/students.txt", 1)
    .map { line => line.split(",") }
    .map { arr => Student(arr(0).trim().toInt, arr(1), arr(2).trim().toInt) }
    .toDF()

    studentDF.registerTempTable("students")
    val teenagerDF = sqlContext.sql("select * from students where age<=18")

    val teenagerRDD = teenagerDF.rdd

    teenagerRDD.map { row => Student(row(0).toString().toInt,row(1).toString(),row(2).toString().toInt) }
    .collect()
    .foreach { stu => println(stu.id + ":" + stu.name + ":" + stu.age) }

    // 在scala中,对row的使用,比java中的row的使用,更加丰富
    // 在scala中,可以用row的getAs()方法,获取指定列名的列
    teenagerRDD.map { row => Student(row.getAs[Int]("id"),row.getAs[String]("name"),row.getAs[Int]("age")) }
    .collect()
    .foreach { stu => println(stu.id + ":" + stu.name + ":" + stu.age) }

    // 还可以通过row的getValuesMap()方法,获取指定几列的值,返回的是个map
    val studentRDD = teenagerRDD.map { row => {
    val map = row.getValuesMap[Any](Array("id","name","age"));
    Student(map("id").toString().toInt,map("name").toString(),map("age").toString().toInt)
    }
    }
    studentRDD.collect().foreach { stu => println(stu.id + ":" + stu.name + ":" + stu.age) }

    }

  • 相关阅读:
    POJ2778 DNA Sequence AC自动机上dp
    codeforces732F Tourist Reform 边双联通分量
    codeforces786B Legacy 线段树优化建图
    洛谷P3588 PUS 线段树优化建图
    codeforces1301D Time to Run 模拟
    codeforces1303B National Project 二分或直接计算
    codeforces1303C Perfect Keyboard 模拟或判断欧拉路
    codeforces1303D Fill The Bag 二进制应用+贪心
    python之路——使用python操作mysql数据库
    python之路——mysql索引原理
  • 原文地址:https://www.cnblogs.com/lishengming00/p/12304147.html
Copyright © 2011-2022 走看看