写在前面

主要是加载文件为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. Android Studio和 adb 的一些常用技巧

    AS和ADB的随身手册 工欲善其事,必先利其器. 最近因为换了Mac,很多地方有些不太适应,刚好最近有想写一篇记录一些小工具技巧的文章,顺便就把Mac中AS常用的快捷键也一并对应记录起来吧. 以下为A ...

  2. python画混淆矩阵(confusion matrix)

    混淆矩阵(Confusion Matrix),是一种在深度学习中常用的辅助工具,可以让你直观地了解你的模型在哪一类样本里面表现得不是很好. 如上图,我们就可以看到,有一个样本原本是0的,却被预测成了1 ...

  3. ionic 删除返回按钮文字,及自定义nav两侧的按钮和title格式

    1.删除返回按钮文字 1)可以在app.js进行配置 .config(function($stateProvider, $urlRouterProvider,$ionicConfigProvider) ...

  4. spring-cloud-kubernetes与SpringCloud Gateway

    本文是<spring-cloud-kubernetes实战系列>的第五篇,主要内容是在kubernetes上部署一个SpringCloud Gateway应用,该应用使用了spring-c ...

  5. Java8新特性_lambda表达式和函数式接口最详细的介绍

    Lambda表达式 在说Lambda表达式之前我们了解一下函数式编程思想,在数学中,函数就是有输入量.输出量的一套计算方案,也就是“拿什么东西做什么事情”. 相对而言,面向对象过分强调“必须通过对象的 ...

  6. JIRA使用过程出现问题整理解答

    转自:http://www.51testing.com/html/44/n-2820444.html 发表于:2015-5-28 10:22  作者:知乎   来源:51Testing软件测试网采编 ...

  7. CodeForces - 632E Thief in a Shop 完全背包

    632E:http://codeforces.com/problemset/problem/632/E 参考:https://blog.csdn.net/qq_21057881/article/det ...

  8. 洛谷P1372 又是毕业季I+数学

    P1372 又是毕业季I 题意:在1-n中找到k个数,使得这k个数的最大公因数最大: 思路,题解: 因为两个数成倍数关系时,它们的最大公因数是两数中的较小数,也就是相对来说最大公因数较大 返回题目,这 ...

  9. CodeForces 86 D Powerful array 莫队

    Powerful array 题意:求区间[l, r] 内的数的出现次数的平方 * 该数字. 题解:莫队离线操作, 然后加减位置的时候直接修改答案就好了. 这个题目中发现了一个很神奇的事情,本来数组开 ...

  10. CodeForces 689 D Friends and Subsequences

    Friends and Subsequences 题解: 如果左端点来说, 那么对于a[i]来说是向上的一条折线, b[i]来说是向下的一条折线, 那么如果这2个折线求交点个数的话, 我们可以二分去求 ...