Spark之 RDD转换成DataFrame的Scala实现
依赖
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.1.3</version>
</dependency>
RDD转化成DataFrame:通过StructType指定schema
package com.zy.sparksql import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.{IntegerType, StringType, StructType}
import org.apache.spark.sql.{DataFrame, Row, SparkSession} /**
* RDD转化成DataFrame:通过StructType指定schema
*/
object StructTypeSchema {
def main(args: Array[String]): Unit = {
//创建sparkSession对象
val sparkSession: SparkSession = SparkSession.builder().appName("StructTypeSchema").master("local[2]").getOrCreate()
//获取sparkContext
val sc: SparkContext = sparkSession.sparkContext
//设置日志级别
sc.setLogLevel("WARN") //读取文件
val textFile: RDD[String] = sc.textFile("D:\\person.txt")
//切分文件
val lineArrayRDD: RDD[Array[String]] = textFile.map(_.split(",")) //关联对象
val rowRDD: RDD[Row] = lineArrayRDD.map(x => Row(x(0).toInt, x(1), x(2).toInt))
//创建rdd的schema信息
val schema: StructType = (new StructType)
.add("id", IntegerType, true, "id")
.add("name", StringType, false, "姓名")
.add("age", IntegerType, true, "年龄")
//根据rdd和schema信息创建DataFrame
val personDF: DataFrame = sparkSession.createDataFrame(rowRDD, schema) //DSL操作
personDF.show() //sql 操作
//将df注册成表
personDF.createTempView("person") sparkSession.sql("select * from person where id =3").show() sparkSession.stop()
}
}
RDD转化成DataFrame:利用反射机制推断schema
package com.zy.sparksql import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, SparkSession} /**
* RDD转化成DataFrame:利用反射机制推断schema
*/ //todo 定义一个样例类
case class Person(id: Int, name: String, age: Int) object CaseClassSchema {
def main(args: Array[String]): Unit = {
//构建sparkSession 指定appName和master地址(本地测试local)
val sparkSession: SparkSession = SparkSession.builder().appName("CaseClassSchema").master("local[2]").getOrCreate()
//获取sparkContext
val sc: SparkContext = sparkSession.sparkContext //设置日志输出级别
sc.setLogLevel("WARN") //加载数据
val dataRDD: RDD[String] = sc.textFile("D:\\person.txt")
//切分数据
val lineArrayRDD: RDD[Array[String]] = dataRDD.map(_.split(","))
//将rdd和person样例类关联
val personRDD: RDD[Person] = lineArrayRDD.map(x => Person(x(0).toInt, x(1), x(2).toInt)) //将rdd转换成dataFrame 导入隐式转换
import sparkSession.implicits._
val personDF: DataFrame = personRDD.toDF //DSL语法
personDF.show()
personDF.printSchema()
personDF.select("name").show()
personDF.filter($"age" > 30).show() println("---------------------------------------------") //sql语法
//首先要创建临时视图
personDF.createTempView("person")
sparkSession.sql("select * from person where id>1").show() sparkSession.stop()
}
}
Spark之 RDD转换成DataFrame的Scala实现的更多相关文章
- Spark中RDD转换成DataFrame的两种方式(分别用Java和Scala实现)
一:准备数据源 在项目下新建一个student.txt文件,里面的内容为: ,zhangsan, ,lisi, ,wanger, ,fangliu, 二:实现 Java版: 1.首先新建一个s ...
- RDD转换成DataFrames
官方提供了2种方法 1.利用反射来推断包含特定类型对象的RDD的schema.这种方法会简化代码并且在你已经知道schema的时候非常适用. 先创建一个bean类 case class Person( ...
- spark的RDD如何转换为DataFrame
1.Dataset与RDD之间的交互 Spark仅支持两种方式来将RDD转成Dataset.第一种方式是使用反射来推断一个RDD所包含的对象的特定类型.这种基于反射的方式会让代码更加地简洁,当你在编写 ...
- RDD转换成为DataFrame
方式一: 通过case class创建DataFrames(反射) TestDataFrame1.scala package com.bky // 隐式类的导入 // 定义case class,相当于 ...
- python 使用csv.reader和csv.writer读写文件并转换成dataframe格式
import csv import pandas as pd ###csv.reader用法 ''' f=open(r"C:\Users\admin\pycdtest\wanyue\yuee ...
- sparksql 用反射的方式将rdd转换成dataset/dataframe
java public class ReflectionDemo { private static SparkConf conf = new SparkConf().setAppName(" ...
- sparksql 动态设置schema将rdd转换成dataset/dataframe
java public class DynamicDemo { private static SparkConf conf = new SparkConf().setAppName("dyn ...
- Python访问MongoDB,并且转换成Dataframe
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/7/13 11:10 # @Author : baoshan # @Site ...
- Spark SQL中 RDD 转换到 DataFrame (方法二)
强调它与方法一的区别:当DataFrame的数据结构不能够被提前定义.例如:(1)记录结构已经被编码成字符串 (2) 结构在文本文件中,可能需要为不同场景分别设计属性等以上情况出现适用于以下方法.1. ...
随机推荐
- 多文件的Makefile
Linux下编写一般采用gcc编译工具,但gcc无法满足大量的文件同时编译,这是就用到Makefile,首先先介绍一下gcc GCC编译的四个步骤 1.预处理,生成预编译文件(.文件): Gcc –E ...
- Android Java访问本地方法(JNI)
当功能需要本地代码实现的时候,Java 代码就需要调用本地代码. 在调用本地代码时,首先要保证本地代码被加载到 Java 执行环境中并与 Java 代码连接在一起,这样 Java 代码在调用本地方法时 ...
- Android 使用adb查看和修改电池信息
1.获取电池信息 $ adb shell dumpsys battery $ adb shell dumpsys battery Current Battery Service state: AC p ...
- SharePoint2013切换帐户登录菜单显示
SharePoint2013帐户姓名显示的地方没有切换帐户的菜单,这个功能对于终端用户是可有可无的,但对于sharepoint管理员或sharepoint开发人员来讲,却是一个很重要的菜单,由于经常要 ...
- win7 + python2.7 安装scipy
问题: 直接pip install scipy将不能正确安装,缺少文件 方法: 下载 "scipy‑0.19.0‑cp27‑cp27m‑win_amd64.whl"[90多M] ...
- websphere删除概要文件(profiles)的方式
[b]删除概要文件:[/b]方案一:1.找到profileRegistry.xml,在目录IBM\WebSphere\AppServer\properties里,去掉想删除的profile的配置即可. ...
- HDOJ5875(线段树)
Function Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- (转)Inno Setup入门(九)——修改安装过程中的文字显示
本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250837 前面说到过可以使用不用的语言文件实现不同的显示方式,方 ...
- 04:Sysbench压测-innodb_flush_log_at_trx_commit,sync_binlog参数对性能的影响
目录 sysbench压测-innodb_flush_log_at_trx_commit,sync_binlog参数对性能的影响 一.OLTP测试前准备 二.MySQL 数据落盘的过程 三.参数说明 ...
- 爬虫高性能相关(协程效率最高,IO密集型)
一背景常识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,采用串行的方式执行,只能等待爬取一个结束后才能继续下一个,效率会非常低. 需要强调的是:串行并不意味着低 ...