• 大三寒假生活12


    今天完成了实验五第二问,因为自己一开始不会,搜索了相关知识后稍微了解了,然后跟着网上的思路解决了,出现了点问题,还是完成了。明天完成第三问,进行实验六。

    编程实现将 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 的所有数据。请写出程序代
    码。
    第一种方法源代码:
    利用反射来推断包含特定类型对象的RDD的schema,适用对已知数据结构的RDD转换
    import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
    import org.apache.spark.sql.Encoder
    import spark.implicits._
    object RDDtoDF{
        def main(args: Array[String]) {
            case class Employee(id:Long,name: String, age: Long)
            val employeeDF = spark.sparkContext.textFile("file:///usr/local/spark/employee.txt").map(_.split(",")).map(attributes => Employee(attributes(0).trim.toInt,attributes(1), attributes(2).trim.toInt)).toDF()
            employeeDF.createOrReplaceTempView("employee")
            val employeeRDD = spark.sql("select id,name,age from employee")
            employeeRDD.map(t => "id:"+t(0)+","+"name:"+t(1)+","+"age:"+t(2)).show()
            }
    }

    但是写成scala文件运行,会报错。

    暂时没解决。

    但是把每一行看做一个spark命令,在spark-shell中执行,可以成功运行。

    方法二:使用编程接口,构造一个schema并将其应用在已知的RDD上。
    import org.apache.spark.sql.types._
    import org.apache.spark.sql.Encoder
    import org.apache.spark.sql.Row
    object RDDtoDF{
        def main(args: Array[String]) {
            val employeeRDD = spark.sparkContext.textFile("file:///usr/local/spark/employee.txt")
            val schemaString = "id name age"val fields = schemaString.split(" ").map(fieldName => StructField(fieldName, StringType, nullable = true))
            val schema = StructType(fields)
            val rowRDD = employeeRDD.map(_.split(",")).map(attributes => Row(attributes(0).trim, attributes(1), attributes(2).trim))
            val employeeDF = spark.createDataFrame(rowRDD, schema)
            employeeDF.createOrReplaceTempView("employee")
            val results = spark.sql("SELECT id,name,age FROM employee")
            results.map(t => "id:"+t(0)+","+"name:"+t(1)+","+"age:"+t(2)).show()
            }
    }
     
  • 相关阅读:
    redis修改密码
    redis配置
    django中日志配置
    django中缓存配置
    navicat批量导入数据
    django添加REST_FRAMEWORK 接口浏览
    django验证码配置与使用
    LUA_OBJECT
    LUA comment
    lua-redis
  • 原文地址:https://www.cnblogs.com/quyangzhangsiyuan/p/12285387.html
Copyright © 2020-2023  润新知