RDD与DataFrame转换
1. 通过反射的方式来推断RDD元素中的元数据。因为RDD本身一条数据本身是没有元数据的,例如Person,而Person有name,id等,而record是不知道这些的,但是变成DataFrame背后一定知道,通过反射的方式就可以了解到背后这些元数据,进而转换成DataFrame。
如何反射?
Scala: 通过case class映射,在case class里面说我们这个RDD里面每个record的不同列的元数据是什么。(废弃)
当样本类不能提前确定时(例如,当记录的结构由字符串或文本数据集编码而成,它在解析时,字段将会对不同的用户有不同的投影结果),SchemaRDD 可以由以下三个步骤创建:
当JavaBean不能被预先定义的时候,编程创建DataFrame分为三步:

 //   从原来的RDD创建一个Row格式的RDD
 //    创建与RDD 中Rows结构匹配的StructType,通过该StructType创建表示RDD 的Schema
 //   通过SQLContext提供的createDataFrame方法创建DataFrame,方法参数为RDD 的Schema
val conf = new SparkConf().setMaster ("local").setAppName ("Test1")
val sc = new SparkContext (conf)
val sqlContext = new SQLContext(sc)
// import sqlContext.implicits._ case class Person(name:String,age:Int)
val people = sc.textFile ("d:/people.txt")
val schemaString = "name age"
val schema = StructType (
schemaString.split(" ").map(fieldName => StructField(fieldName,StringType,true))
)
val rowRDD = people.map(_.split(",")).map(p => Row(p(0), p(1).trim))
val peopleSchemaRDD = sqlContext.createDataFrame(rowRDD, schema)
peopleSchemaRDD .registerTempTable("people" )
val results = sqlContext . sql ("SELECT name FROM people" )
results.printSchema()
println(results.count())
results.map(t => "Name: " + t(0)).collect().foreach(println)

//1.利用反射来推断包含特定类型对象的RDD的schema。这种方法会简化代码并且在你已经知道schema的时候非常适用。

//2.   先创建一个bean类,然后将Rdd转换成DataFrame
case class Person(name: String, age: Int)
def main (args : Array[String]) : Unit =
{
val conf = new SparkConf().setMaster ("local").setAppName ("Test1")
val sc = new SparkContext (conf)
val sqlContext = new SQLContext(sc)
import sqlContext.implicits._ val people = sc.textFile("d:/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)).toDF()
people.registerTempTable("people")
val teenagers = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19")
teenagers.map(t => "Name: " + t(0)).collect().foreach(println)
teenagers.map(t => "Name: " + t.getAs[String]("name")).collect().foreach(println)
teenagers.map(_.getValuesMap[Any](List("name", "age"))).collect().foreach(println)

RDD与DataFrame的转换的更多相关文章

  1. 045 RDD与DataFrame互相转换

    一:RDD与DataFrame互相转换 1.总纲 二:DataFrame转换为RDD 1.rdd 使用schema可以获取DataFrame的schema 使用rdd可以获取DataFrame的数据 ...

  2. 转】RDD与DataFrame的转换

    原博文出自于: http://www.cnblogs.com/namhwik/p/5967910.html RDD与DataFrame转换1. 通过反射的方式来推断RDD元素中的元数据.因为RDD本身 ...

  3. RDD&Dataset&DataFrame

    Dataset创建 object DatasetCreation { def main(args: Array[String]): Unit = { val spark = SparkSession ...

  4. 36、将RDD转换为DataFrame

    一.概述 为什么要将RDD转换为DataFrame? 因为这样的话,我们就可以直接针对HDFS等任何可以构建为RDD的数据,使用Spark SQL进行SQL查询了.这个功能是无比强大的. 想象一下,针 ...

  5. spark-DataFrame之RDD和DataFrame之间的转换

    package cn.spark.study.core.mycode_dataFrame; import java.io.Serializable;import java.util.List; imp ...

  6. RDD、DataFrame、Dataset三者三者之间转换

    转化: RDD.DataFrame.Dataset三者有许多共性,有各自适用的场景常常需要在三者之间转换 DataFrame/Dataset转RDD: 这个转换很简单 val rdd1=testDF. ...

  7. RDD、DataFrame和DataSet的区别

    原文链接:http://www.jianshu.com/p/c0181667daa0 RDD.DataFrame和DataSet是容易产生混淆的概念,必须对其相互之间对比,才可以知道其中异同. RDD ...

  8. 谈谈RDD、DataFrame、Dataset的区别和各自的优势

    在spark中,RDD.DataFrame.Dataset是最常用的数据类型,本博文给出笔者在使用的过程中体会到的区别和各自的优势 共性: 1.RDD.DataFrame.Dataset全都是spar ...

  9. spark RDD,DataFrame,DataSet 介绍

    弹性分布式数据集(Resilient Distributed Dataset,RDD) RDD是Spark一开始就提供的主要API,从根本上来说,一个RDD就是你的数据的一个不可变的分布式元素集合,在 ...

随机推荐

  1. 【转】Sublime Text3注册码(可用)

    补充:2015.11.05日经过测试,3个注册码都是可用的,不会用的请百度用法... 最近觉得Sublime Text3比Notepad++好使,可惜需要购买,于是网上搜了一下,屌丝的福音啊: Sub ...

  2. webdriver无法打开firefox

    1.执行webdriver.firefox()报错,提示: WebDriverException: Message: "Can't load the profile. Profile Dir ...

  3. 作业七:团队项目——Alpha版本冲刺阶段005

    今日进展:编写代码. 今日安排:完成开始部分代码.

  4. HTMlhleper

    @{ ViewBag.Title = "Index";} <h2>Index</h2> <div> @{ int id=12121; var I ...

  5. 【转】输入/输出流 - 全面掌握IO

    File类: 程序中操作文件和目录都可以使用File类来完成即不管是文件还是目录都是使用File类来操作的,File能新建,删除,重命名文件和目录,但File不能访问文件内容本身,如果需要访问文件本身 ...

  6. google 账号登陆chrome内容是中文的问题

    最近要用到google accout使用某项服务,奇怪的是之前是英文,登陆后就显示中文了,我把浏览器默认的语言和电脑的系统语言改了也无济于事,最好还是google 帮忙解决了,原来我的google a ...

  7. Android四大组件-Activity

    http://android.tgbus.com/Android/androidnews/201204/419485.shtml

  8. mysqlnd cannot connect 连接错误处理方法

    mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administra ...

  9. HTML5的form表单属性

    form:HTML4中,表单内的从属元素必须书写在<form></form>之内,但是在HTML5中,表单的从属元素可以处于页面的任何位置,然后为其添加form属性,属性值为f ...

  10. PKU 1006

    数学问题吧,有兴趣的可以研究一下“中国剩余定理” // 1006.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include < ...