写在前面

主要是加载文件为RDD,再把RDD转换为DataFrame,进而使用DataFrame的API或Sql进行数据的方便操作

简单理解:DataFrame=RDD+Schema

贴代码

package february.sql

import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
import org.apache.spark.sql.{Row, SparkSession} /**
* Description: ============Spark SQL支持两种不同的方法将现有RDD转换为Datasets数据集==============
*
*
* (1) 反射 case class 前提:事先需要知道你的字段,字段类型
* (2) 编程 事先不知道有哪几列
* **** 优先选择第一种 ****
*
* @Author: 留歌36
* @Date: 2019/2/25 18:41
*/
object DataFrameRDDApp {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder()
.appName(this.getClass.getSimpleName)
.master("local[2]")
.getOrCreate()
// 方法一:反射
// inferReflection(spark) // 方法二:编程
program(spark) spark.stop() } /**
* 编程的方式
* @param spark
*/
private def program(spark: SparkSession) = {
val textFile = spark.sparkContext.textFile("f:\\infos.txt") val infoRdd = textFile.map(_.split(",")).map(line => Row(line(0).toInt, line(1), line(2).toInt)) val structType = StructType(Array(
StructField("id", IntegerType, true),
StructField("name", StringType, true),
StructField("age", IntegerType, true))) val DF =spark.createDataFrame(infoRdd, structType)
DF.printSchema() DF.show() } /**
* 反射的方式
* @param spark
*/
private def inferReflection(spark: SparkSession) = {
// RDD ==> DataFrame rdd.toDF()
val textFile = spark.sparkContext.textFile("f:\\infos.txt")
// split()返回 String[]
// 注意:需要导入隐式转换
import spark.implicits._
val infoDF = textFile.map(_.split(",")).map(line => Info(line(0).toInt, line(1), line(2).toInt)).toDF() // =====基于dataframe的API=======之后的就都是DataFrame 的操作了==============
infoDF.show() infoDF.filter(infoDF.col("age") > 30).show() // ======基于SQL的API===========DataFrame 创建为一张表================
infoDF.createOrReplaceTempView("infos")
spark.sql("select * from infos where age > 30").show()
} //类似java bean实体类
// 反射的方式,将RDD的 每个字段 与 这里的实体类 进行一一映射
case class Info(id: Int, name: String, age: Int) }

更多相关小demo:每天一个程序:https://blog.csdn.net/liuge36/column/info/34094

RDD转换为DataFrame【反射/编程】的更多相关文章

  1. 36、将RDD转换为DataFrame

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

  2. spark-sql将Rdd转换为DataFrame进行操作的两种方法

    SparkConf sparkConf = new SparkConf() .setMaster("local").setAppName("ClzMap"); ...

  3. Spark RDD转换为DataFrame

    #构造case class,利用反射机制隐式转换 scala> import spark.implicits._ scala> val rdd= sc.textFile("inp ...

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

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

  5. 045 RDD与DataFrame互相转换

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

  6. Spark提高篇——RDD/DataSet/DataFrame(二)

    该部分分为两篇,分别介绍RDD与Dataset/DataFrame: 一.RDD 二.DataSet/DataFrame 该篇主要介绍DataSet与DataFrame. 一.生成DataFrame ...

  7. RDD、DataFrame和DataSet的区别

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

  8. RDD转换DataFrame

    Spark SQL有两种方法将RDD转为DataFrame. 1. 使用反射机制,推导包含指定类型对象RDD的schema.这种基于反射机制的方法使代码更简洁,而且如果你事先知道数据schema,推荐 ...

  9. RDD、DataFrame和DataSet

    简述 RDD.DataFrame和DataSet是容易产生混淆的概念,必须对其相互之间对比,才可以知道其中异同:DataFrame多了数据的结构信息,即schema.RDD是分布式的 Java对象的集 ...

随机推荐

  1. python 05 字典

    [TOC] 字典——dict { } 字典是无序,可变的数据类型. 字典:用于存储数据,存储大量数据,字典要比列表快:将数据和数据之间进行关联. 1. 定义:  dic = {键:值,键:值}  #每 ...

  2. HDU 4685

    题意略. 思路: 本题和POJ1904颇为相似,只是那个最大匹配没有现成的,要我们自己求出来.并且要给每一个单身的王子/公主现找一个虚拟的对象. 这也是合乎情理的,王子每一次换一个公主时,可能会导致某 ...

  3. springboot之additional-spring-configuration-metadata.json自定义提示

    springboot之additional-spring-configuration-metadata.json自定义提示 简介 additional-spring-configuration-met ...

  4. vue-cli3.x创建及运行项目

    Node 版本要求 Vue CLI 需要 Node.js 8.9 或更高版本 (推荐 8.11.0+).如果你已经全局安装了旧版本的 vue-cli (1.x 或 2.x),你需要先通过 npm un ...

  5. 小米 OJ 编程比赛 02 月常规赛 3 Logic Gatekeeper CDQ分治

    link:https://code.mi.com/problem/list/view?id=139 题意: 有一个1e6 * 1e6 大的格子,现在有两种操作:1,给一个子矩阵中的每个格子加上k.2, ...

  6. SDU暑期集训排位(3)

    B. Mysterious LCM 做法 保留 \(a_i|x\) 的元素,其它元素解体. \(a_i\) 的某个质因子的指数,要和 \(x\) 的这个质因子一样多,才有贡献,否则这个质因子它在划水啊 ...

  7. 牛客暑假多校第五场 D inv

    题意:给你一个n, 接来下给你一个 [1,n] 中偶数的排列, 还有一个 [1, n] 中 奇数 按照递增的顺序排列, 现在求一个原数列, 使得偶数列排序 和 奇数列 都是原数列的一个子序列, 现在求 ...

  8. JavaScript中选项卡的几种写法

    效果图: 1.基本写法 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  9. List集合的排序

    最近在写需求时,将某张表中的短信信息拿出,sql写完后,取出来后的结构是List<Map>,在进行到某一步时需要将这个List<Map>进行逆序排序, 当时第一想法便是写一个f ...

  10. nvm 管理多个活动的node.js版本

    前序:最近在使用taro框架开发小程序,因为安装taro时遇到一些问题,后来重新安装了node版本——v10.16.3,却影响了我本地开发的项目,故此使用nvm来管理node的版本,更加灵活的切换以支 ...