1.DataFrame的创建方式

  1.1 通过加载外部文件创建

//通过sqlContext读取json文件创建DataFrame
DataFrame dataFrame=sqlContext.read().json("src/main/resources/datafromcreate.txt");
//通过两种方式加载json文件
//sqlContext.read().json("src/main/resources/datafromcreate.txt");
sqlContext.read().format("json").load("src/main/resources/datafromcreate.txt");

  1.2 通过RDD和元数据进行转换

    1.2.1 通过使用动态构建的元数据的方式创建DataFrame

//创建sqlContext
SQLContext sqlContext=new SQLContext(context);
//使用程序构建DataFrame的元数据
StructType structType=new StructType(new StructField[]{
DataTypes.createStructField("id", DataTypes.IntegerType, false),
DataTypes.createStructField("name", DataTypes.StringType, true),
DataTypes.createStructField("age", DataTypes.IntegerType, true)
}); //创建studentsRdd
JavaRDD<Row> studentsRdd=context.textFile("src/main/resources/students.txt").map(new Function<String, Row>() { private static final long serialVersionUID = 1L; public Row call(String line) throws Exception {
String[] words=line.split(" ");
return RowFactory.create(Integer.parseInt(words[]),words[],Integer.parseInt(words[]));
}
}); //使用动态构建的元数据创建DataFrame
DataFrame studentDataFrame= sqlContext.createDataFrame(studentsRdd, structType);

    1.2.2 通过反射的方式,使用javabean的属性作为DataFrame的元数据进行创建DataFrame

//封装为Student JavaRDD
JavaRDD<Student> students=context.textFile("src/main/resources/students.txt").map(new Function<String, Student>() { private static final long serialVersionUID = 1L; public Student call(String line) throws Exception {
String[] words=line.split(" ");
return new Student(Integer.parseInt(words[]), words[], Integer.parseInt(words[]));
}
}); //使用反射技术,将javaRdd转换为DataFrame,使用javabean的属性定义DataFrame的元数据
DataFrame studentDataFrame= sqlContext.createDataFrame(students, Student.class);

    1.2.3 使用hiveContext.table方法将hive表中的数据装换为DataFrame

DataFrame goodStudentDF=hiveContext.table("sqark.good_student_info");

  1.3 加载分区表的parquet文件,自动推断分区字段

//加载parquet文件为DataFrame
DataFrame usersDF=sqlContext.read().parquet("src/main/resources/parquet/users.parquet"); /**
* root
|-- name: string (nullable = true)
|-- age: long (nullable = true)
*/
usersDF.printSchema(); /**
* 加载区别表中的数据是会自动推断分区列,
  users.parquet只有两个字段name,age;
  female和coutry为分区字段
*/
usersDF=sqlContext.read().parquet("src/main/resources/parquet/female=male/coutry=US/users.parquet"); /**
* root
|-- name: string (nullable = true)
|-- age: long (nullable = true)
|-- female: string (nullable = true)
|-- coutry: string (nullable = true)
*/
usersDF.printSchema();

  1.4 合并分区

    开启合并元数据的两种方式:
      1) sqlContext.read().option("mergeSchema", "true")
       2) SparkConf().set("spark.sql.parquet.mergeSchema", "true")

/**
* megerschema/idandage.txt 中的内容只有id和age两个属性
* megerschema/idandname.txt 中的内容只有id和name两个属性
* 合并以后的元素为id,name,age三个属性
*/
DataFrame personDF=sqlContext.read().option("mergeSchema", "true").format("json").load("src/main/resources/megerschema");
personDF.printSchema();

2.将DataFrame进行保存到外部文件系统

//将DataFrame,默认以parquet类型进行保存,可以使用format修改保存的文件格式
personDF.write().save("src/main/resources/output/persons");
//将DataFrame使用json格式保存
personDF.write().format("json").save("src/main/resources/output/persons");

spark复习总结03的更多相关文章

  1. 【spark 深入学习 03】Spark RDD的蛮荒世界

    RDD真的是一个很晦涩的词汇,他就是伯克利大学的博士们在论文中提出的一个概念,很抽象,很难懂:但是这是spark的核心概念,因此有必要spark rdd的知识点,用最简单.浅显易懂的词汇描述.不想用学 ...

  2. spark复习笔记(1)

    使用spark实现work count ---------------------------------------------------- (1)用sc.textFile(" &quo ...

  3. spark复习笔记(7):sparkstreaming

    一.介绍 1.sparkStreaming是核心模块Spark API的扩展,具有可伸缩,高吞吐量以及容错的实时数据流处理等.数据可以从许多来源(如Kafka,Flume,Kinesis或TCP套接字 ...

  4. spark复习笔记(7):sparkSQL

    一.saprkSQL模块,使用类sql的方式访问Hadoop,实现mr计算,底层使用的是rdd 1.hive //hadoop  mr  sql 2.phenoix //hbase上构建sql的交互过 ...

  5. spark复习笔记(6):RDD持久化

    在spark中最重要的功能之一是跨操作在内存中持久化数据集.当你持久化一个RDD的时候,每个节点都存放了一个它在内存中计算的一个分区,并在该数据集的其他操作中进行重用,持久化一个RDD的时候,节点上的 ...

  6. spark复习笔记(6):数据倾斜

    一.数据倾斜 spark数据倾斜,map阶段对key进行重新划分.大量的数据在经过hash计算之后,进入到相同的分区中,zao

  7. spark复习笔记(4):RDD变换

    一.RDD变换 1.返回执行新的rdd的指针,在rdd之间创建依赖关系.每个rdd都有一个计算函数和指向父rdd的指针 Spark是惰性的,因此除非调用某个转换或动作,否则不会执行任何操作,否则将触发 ...

  8. spark复习笔记(5):API分析

    0.spark是基于hadoop的mr模型,扩展了MR,高效实用MR模型,内存型集群计算,提高了app处理速度. 1.特点:(1)在内存中存储中间结果 (2)支持多种语言:java scala pyt ...

  9. spark复习笔记(4):spark脚本分析

    1.[start-all.sh] #!/usr/bin/env bash # # Licensed to the Apache Software Foundation (ASF) under one ...

随机推荐

  1. spring cloud学习--eureka 01

    本博客为学习使用,学习教程翟永超 spring cloud 微服务实战 搭建eureka server注册中心 spring initialize构建spring boot项目 构建网址:https: ...

  2. mybatis小技巧

    本节主要讲解mybatis如下五个方面的内容: foreach 批量插入 模糊查询like的写法 #{}和${}的区别 解决实体类中的属性名和表中的字段名不一致问题 由于每次建立工程比较复杂,可以参考 ...

  3. xterm.js的深入学习

    demo <template> <div id="app" class="app-box">Hello</div> < ...

  4. 数的直径(两次DFS)

    题目传送门 桃花 题目描述 桃花一簇开无主,可爱深红映浅红.                                         ——<题百叶桃花> 桃花长在桃树上,树的每个节 ...

  5. 使用jquery.validate组件进行前端数据验证并实现异步提交前验证检查

    学习如鹏网掌上组的项目开发,使用到了前端验证,视频里使用的ValidateForm验证框架,但是我使用的Hui的框架中使用的是jquery.validate验证框架 所以自行学习jquery.vali ...

  6. mysql基于GTIDS复制

    GTIDS的环境:一台master 192.168.200.111多个slave: 192.168.200.112 192.168.200.113 修改master服务器:[root@localhos ...

  7. Codeforces 1178E

    题意:给你一个长度为n的字符串,只包含a, b, c3种字符,字符串中相邻字符一定不同,问是否存在一个长度为n / 2(向下取整)的子序列是回文的,有就输出. 思路:相邻的字符一定不同,并且一共只有3 ...

  8. 基于window ftp上传问题

    FtpClient上传文件异常:java.net.SocketException: Connection reset cmd输入: netsh advfirewall set global State ...

  9. Struts2中Action类的三种写法

      一.普通的POJO类(没有继承没有实现)-基本不使用 POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创 ...

  10. Electron-vue实战(二)— 请求Mock数据渲染页面

    Electron-vue实战(二)— 请求Mock数据渲染页面 作者:狐狸家的鱼 本文链接 GitHub:sueRimn 一.环境搭建 1.安装Mock.js 如果仅仅用作脱离后台的模拟数据,就安装在 ...