定义

type DataFrame = org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]

创建DataFrame

使用read相关方法创建

使用read方法获取DataFrameReader阅读器的对象,然后调用相应的读取文件的方法

 val df: DataFrame = spark.read.json("./data/emp.json")

read可否直接读成Dataset格式呢?不可以,因为ds得有个具体的泛型啊!就是你先得定义一个Emp类来映射你要读取的文件

使用java Bean+反射 创建

步骤总结
1 创建一个java类,
2创建一个List,元素为上面创建的类
3利用createDataFrame房间DF对象

object DataFrameDemo extends App {val spark: SparkSession = SparkSession.builder().appName("dfdemo").master("local").getOrCreate()
//创建Student列表val students = List(new Student(1001, "zs", "f", 23),new Student(1002, "ls", "m", 13),new Student(1004, "lq", "f", 29),new Student(1003, "kk", "m", 20))
//支持Scala和Java集合之间互操作性的隐式转换集合。import scala.collection.JavaConversions._
//将schema应用于Javabean上private val frame: DataFrame = spark.createDataFrame(students, classOf[Student])frame.show()
}

创建JavaBean类

/*** javaBean规范* 1 成员私有化* 2提供公有的get set方法* 3构造器至少两个,一个无参,一个全参* 4重写equals/hashcode.toString方法*/
public class Student {private int id;private String name;private String gender;private int age;public Student(){}public Student(int id, String name, String gender, int age) {this.id = id;this.name = name;this.gender = gender;this.age = age;}public int getId() {return id;}public String getName() {return name;}public String getGender() {return gender;}public int getAge() {return age;}public void setId(int id) {this.id = id;}public void setName(String name) {this.name = name;}public void setGender(String gender) {this.gender = gender;}public void setAge(int age) {this.age = age;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return id == student.id &&age == student.age &&Objects.equals(name, student.name) &&Objects.equals(gender, student.gender);}@Overridepublic int hashCode() {return Objects.hash(id, name, gender, age);}@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", gender='" + gender + '\'' +", age=" + age +'}';}
}

使用动态编程方式

/*** Row:代表的是二维表中的一行记录,或者就是一个Java对象* StructType:是该二维表的元数据信息,是StructField的集合* StructField:是该二维表中某一个字段/列的元数据信息(主要包括,列名,类型,是否可以为null)*/
object DataFrameDemo1 extends App {val spark: SparkSession = SparkSession.builder().appName("SparkSQL").master("local").getOrCreate()private val value: RDD[Row] = spark.sparkContext.parallelize(List(Row(1, "李伟", 1, 180.0),Row(2, "汪松伟", 2, 179.0),Row(3, "常洪浩", 1, 183.0),Row(4, "麻宁娜", 0, 168.0)))private val structType = types.StructType(List(StructField("id", DataTypes.IntegerType, nullable = false),StructField("name", DataTypes.StringType, nullable = false),StructField("gender", DataTypes.IntegerType, nullable = false),StructField("height", DataTypes.DoubleType, nullable = false)))val frame: DataFrame = spark.createDataFrame(value, structType)frame.show()
}

DataFrame对象转RDD对象

在上面例子创建的继承上添加如下代码

private val rdd: RDD[Row] = frame.rdd
rdd.foreach(println)

结果如下

[1,李伟,1,180.0]
[2,汪松伟,2,179.0]
[3,常洪浩,1,183.0]
[4,麻宁娜,0,168.0]

DataFrame转Dataset

as方法可以转,传入一个泛型就可以.

Spark DataFrame入门详解相关推荐

  1. Spark Dataset 入门详解

    定义 class Dataset[T](sparkSession: SparkSession, queryExecution: QueryExecution, encoder: Encoder[T]) ...

  2. Spark RDD 论文详解(一)摘要和介绍

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...

  3. Spark RDD 论文详解(五)实现

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...

  4. linux 日志按大小切割_nginx入门详解(六)- 日志切割

    上一章讲解了nginx的目录加密功能,本章重点介绍nginx的日志切割. 笨办法学linux:nginx入门详解(五)- 目录加密​zhuanlan.zhihu.com 在第二章,我们探讨了nginx ...

  5. python怎么安装myqr模块-python二维码操作:对QRCode和MyQR入门详解

    python是所有编程语言中模块最丰富的 生活中常见的二维码功能在使用python第三方库来生成十分容易 三个大矩形是定位图案,用于标记二维码的大小.这三个定位图案有白边,通过这三个矩形就可以标识一个 ...

  6. python语言编程基础-Python语言入门详解!快速学成Python!

    原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...

  7. python语言入门m-Python语言入门详解!快速学成Python!

    今日主题 "Python语言入门详解" 近两年来,Python语言借着数据科学和人工智能的"东风"成为了最流行的编程语言--街头巷尾人们口口相传.同时,Pyth ...

  8. python语言入门详解-python初级教程:入门详解

    python初级教程:入门详解 Crifan Li 目录 前言 .................................................................... ...

  9. 【GCN】图卷积网络(GCN)入门详解

    机器学习算法与自然语言处理出品 @公众号原创专栏作者 Don.hub 单位 | 京东算法工程师 学校 | 帝国理工大学 图卷积网络(GCN)入门详解 什么是GCN GCN 概述 模型定义 数学推导 G ...

最新文章

  1. 爬虫笔记9实例股票数据
  2. 现代的时代精神是什么?
  3. 李洋疯狂C语言之关于自增自减遇到的一些问题
  4. CVPR最佳作者新作!无监督学习可变形3D对象
  5. 8086架构/流水线及其优化
  6. MySQL性能调优与架构设计-架构篇
  7. 关于perl中中文乱码的解决办法
  8. BZOJ 1211: [HNOI2004]树的计数 purfer序列
  9. BAT面试问题--算法工程师(机器学习)
  10. 20145237 Exp2 后门原理与实践
  11. linux等候脚本,linux – 在bash脚本中继续之前等待通过ssh运行的脚本完成
  12. Java 匿名内部类、Java 中 == 与 equals 的区别
  13. MySQL-快速入门(2)数据类型
  14. 程序员的奋斗史(三十)——近期微信公众平台更新文章集锦
  15. 基于微信小程序的疫情防控平台设计与实现-计算机毕业设计源码+LW文档
  16. MapGIS完美转ArcGIS ShapeFile攻略
  17. GSM、PLMN区、msc区、位置区、基站区、小区、TAC、CI 名词解析
  18. oracle列转行用法,oracle 行转列 列转行
  19. 山东田野稻花香 国稻种芯·中国水稻节:威海荣成引种的旱稻
  20. 中国2001-2019年各省风险投资数据VC

热门文章

  1. hadoop开启后jps只有jps一个进程
  2. 九江职业学院计算机专业怎么样,请问九江职业大学和九江职业技术学院,相比之下哪个好一点?...
  3. ios 怎么判断字符串的字节数_如何用IOS判断字符串是不是纯数字
  4. linux 指定jvm djava.library.path_JVM命令
  5. MySQL中查询字段为空或者为null方法
  6. 《机器学习》二刷超详细笔记| 第一章 绪论
  7. maxscale mysql5.7_Maxscale实现Mysql读写分离
  8. java comparator_Java 集合排序策略接口 Comparator
  9. layer code 200转码 写一个后台封装通用实体类
  10. java 冒泡算法_关于java中的冒泡算法