1、通过反射的方式 使用反射来推断包含特定数据类型的RDD,这种方式代码比较少,简洁,只要你会知道元数据信息时什么样,就可以使用了

代码如下:

import org.apache.spark.sql.{SQLContext, SaveMode}
import org.apache.spark.{SparkConf, SparkContext} object RDD2DataFrame {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("DF").setMaster("local")
val sc = new SparkContext(conf)
val sQLContext = new SQLContext(sc)
//创建一个普通的RDD
val rdd = sc.textFile("D:\\data\\spark\\students.txt")
var rdd2= rdd.map(t=>{
val lines = t.split(",")
studented(lines(0).toInt,lines(1),lines(2).toInt) })
//注意:需要导入隐式转换
import sQLContext.implicits._
val df = rdd2.toDF()
//注册临时表
df.registerTempTable("student")
val dfs = sQLContext.sql("select name from student where age>18")
dfs.write.mode(SaveMode.Append).text("D:\\result\\Rdd2DataFrame") } }
case class studented(id:Int,name:String,age:Int)

  

2、通过编程接口的方式 你可以自己动态的构建一份元数据,这种代码比较多,但是适合你不知道元数据的时候使用,一般都用这种方式

代码如下:

object RDD2DataFrame2 {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("df02").setMaster("local")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
//val df = sqlContext.read.json("D:\\data\\spark\\students.json") val rdd = sc.textFile("D:\\data\\spark\\students.txt")
val rowRdd = rdd.map(t => {
val str = t.split(",")
Row(str(0).toInt, str(1), str(2).toInt)
})
//构建StructType
val structType = StructType(Array(StructField("id", IntegerType, true),
StructField("name", StringType, true),
StructField("age", IntegerType, true)
))
//创建DataFrame
val df: DataFrame = sqlContext.createDataFrame(rowRdd,structType)
df.registerTempTable("stu")
val sql = sqlContext.sql("select * from stu where age>17")
sql.rdd.foreach(println)
}
}

  

最新文章

  1. Windows bat脚本学习(1)
  2. Xcode playground markdown常用语法
  3. 用NPOI从DataBase到Excel '2
  4. 【linux草鞋应用编程系列】_3_ 进程间通信
  5. android设置图片自适应控件大小
  6. LAMP一键安装包-CentOS 5/6下自动编译安装Apache,MySQL,PHP
  7. uva 10730
  8. CocoaPods导入第三方库头文件自动补齐
  9. 简单的php数据库操作类代码(增,删,改,查)
  10. Struts2学习笔记①
  11. 流程控制------if else分支语句
  12. PHP闭包Closure与array_reduce结合的一个范例
  13. python_爬百度百科词条
  14. Qt框架及模块认识
  15. Servlet抽取的问题-method传递问题+表单提交的问题
  16. [转] Java 的泛型擦除和运行时泛型信息获取
  17. python 多线程和多进程
  18. python从FTP下载文件
  19. PythonStudy——Python 内置函数 Built-in function
  20. numpy.asmatrix的用法

热门文章

  1. 打开excl链接时总是出现问题
  2. eclipse 上使用tomcat 启动项目,项目目录下无.class 文件
  3. java 内存举例
  4. 解决robotframework安装时提示wxPython not found问题
  5. Jenkins添加项目说明,增加项目描述
  6. PHP防止SQL注入文件,引入即可
  7. 流形(Manifold)初步
  8. vim实用配置
  9. HTML第三章:表单
  10. scoped,会使设置UI组件库的样式识别不出来