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)
}
}

  

分别用反射、编程接口的方式创建DataFrame的更多相关文章

  1. JAVA SparkSQL初始和创建DataFrame的几种方式

    建议参考SparkSQL官方文档:http://spark.apache.org/docs/latest/sql-programming-guide.html 一.前述       1.SparkSQ ...

  2. 【Spark篇】---SparkSQL初始和创建DataFrame的几种方式

    一.前述       1.SparkSQL介绍 Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制. SparkSQL支持查询原 ...

  3. Spark SQL初始化和创建DataFrame的几种方式

    一.前述       1.SparkSQL介绍 Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制. SparkSQL支持查询原 ...

  4. Android 反射-换一种方式编程

    Android 反射-换一种方式编程 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/59109933 本文出自[赵彦军的博客] 上一 ...

  5. mybatis --- 以接口的方式进行编程

    );  我们来学习下接口方式的编程. 接口类IBookDao.java package com.mybatis.dao; import com.mybatis.model.Book; public i ...

  6. VB 在Visio 2010 以编程方式创建子进程图

    在2010年Visio以编程方式创建子进程图 Office 2010  https://msdn.microsoft.com/en-us/library/gg650651.aspx   简介: 学习如 ...

  7. Android开发之UI的编程方式创建

    我们知道,android中一个activity对应一个xml的UI配置文件,除了用xml文件配置的方式创建用户界面外,还可以使用代码编程的方式来创建一个用户界面.如果用户界面需要在运行过程中动态生成的 ...

  8. 使用Callable接口创建线程和使用线程池的方式创建线程

    1.使用Callable接口的方式实现多线程,这是JDK5.0新增的一种创建多线程的方法 package com.baozi.java2; import java.util.concurrent.Ca ...

  9. Java8内置的函数式编程接口应用场景和方式

    首先,我们先定义一个函数式编程接口 @FunctionalInterface public interface BooleanFunctionalInterface<T> { boolea ...

随机推荐

  1. ansible测试环境

    ip user sudo_user port usage 192.168.48.81 ansible root 29922 nagios & ansible control 192.168.4 ...

  2. 2017年10月31日结束Outlook 2007与Office 365的连接

    2017 年10月31日 ,微软即将推出 Office 365中Exchange Online邮箱将需要Outlook for Windows的连接,即通过HTTP Over MAPI方式,传统使用R ...

  3. rosservice call ERROR:Unable to load type ... Have you typed 'make'

    you need to source in the new terminal $ source ~/catkin_ws/devel/setup.bash

  4. UE4工具

    COMMON CONTAINERS TARRAY (Engine\Source\Runtime\Core\Public\Containers\Array.h) TSET (Engine\Source\ ...

  5. Aizu The Maximum Number of Customers

    http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=DSL_5_A The Maximum Number of Customers Ide ...

  6. 如果有反向代理的情况下,获取最原始的IP的办法

    HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_HOST"];

  7. java 生成12位随机数,解决The literal 9999999999999 of type int is out of range 问题

    原本想这样产生一个随机数,但是你会看到,只要数字超过了9位数,就会出问题,提示“The literal 1000000000000 of type int is out of range” 解决方式是 ...

  8. P1909 买铅笔

    题目描述 P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 33种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的铅笔 ...

  9. 斯坦福大学3D模型库-The Stanford 3D Scanning Repository

    这里总是让人感觉有差距的地方!!! http://graphics.stanford.edu/data/3Dscanrep/

  10. Oracle字符编码与汉字存储长度的处理

    执行如下语句,查看汉字在数据库中所占的字节: select vsize('汉') from dual; 一般情况下,得到的结果大部分为值:2 或 3 一般linux下安装oracle数据库,默认字符编 ...