RDD转换成为DataFrame
方式一: 通过case class创建DataFrames(反射)
TestDataFrame1.scala
package com.bky
// 隐式类的导入
// 定义case class,相当于表结构
case class Dept(var id:Int, var position:String, var location:String)
// 需要导入SparkSession这个包
import org.apache.spark.sql.SparkSession
/**
* 方式一: 通过case class创建DataFrames(反射)
*/
object TestDataFrame1 {
def main(args: Array[String]): Unit = {
/**
* 直接使用SparkSession进行文件的创建。
* 封装了SparkContext,SparkConf,SQLContext,
* 为了向后兼容,SQLContext和HiveContext也被保存了下来
*/
val spark = SparkSession
.builder() //构建sql
.appName("TestDataFrame1") // 设置文件名
.master("local[2]") // 设置executor
.getOrCreate() //获取或创建
import spark.implicits._ // 隐式转换
// 将本地的数据读入RDD,将RDD与case class关联
val deptRDD = spark.read.textFile("/Users/hadoop/data/dept.txt")
.map(line => Dept(line.split("\t")(0).toInt,
line.split("\t")(1),
line.split("\t")(2).trim))
// 将RDD转换成DataFrames(反射)
val df = deptRDD.toDF()
// 将DataFrames创建成一个临时的视图
df.createOrReplaceTempView("dept")
// 使用SQL语句进行查询
spark.sql("select * from dept").show()
}
}
精简版
TestDataFrame1.scala
package com.bky
import org.apache.spark.sql.SparkSession
object TestDataFrame1 extends App {
val spark = SparkSession
.builder() //构建sql
.appName("TestDataFrame1")
.master("local[2]")
.getOrCreate()
import spark.implicits._
val deptRDD = spark.read.textFile("/Users/hadoop/data/dept.txt")
.map(line => Dept(line.split("\t")(0).toInt,
line.split("\t")(1),
line.split("\t")(2).trim))
val df = deptRDD.toDF()
df.createOrReplaceTempView("dept")
spark.sql("select * from dept").show()
}
case class Dept(var id:Int, var position:String, var location:String)
方式二:通过创建structType创建DataFrames(编程接口)
TestDataFrame2.scala
package com.bky
import org.apache.spark.sql.types._
import org.apache.spark.sql.{Row, SparkSession}
/**
*
* 方式二:通过创建structType创建DataFrames(编程接口)
*/
object TestDataFrame2 extends App {
val spark = SparkSession
.builder()
.appName("TestDataFrame2")
.master("local[2]")
.getOrCreate()
/**
* 将RDD数据映射成Row,需要导入import org.apache.spark.sql.Row
*/
import spark.implicits._
val path = "/Users/hadoop/data/dept.txt"
val fileRDD = spark.read.textFile(path)
val rowRDD= fileRDD.map(line => {
val fields = line.split("\t")
Row(fields(0).toInt, fields(1), fields(2).trim)
})
// 创建StructType来定义结构
val innerStruct = StructType(
// 字段名,字段类型,是否可以为空
StructField("id", IntegerType, true) ::
StructField("position", StringType, true) ::
StructField("location", StringType, true) :: Nil
)
val df = spark.createDataFrame(innerStruct)
df.createOrReplaceTempView("dept")
spark.sql("select * from dept").show()
}
方式三:通过json文件创建DataFrames
TestDataFrame3.scala
package com.bky
import org.apache.spark.sql.SparkSession
/**
* 方式三:通过json文件创建DataFrames
*/
object TestDataFrame3 extends App {
val spark = SparkSession
.builder()
.master("local[2]")
.appName("TestDataFrame3")
.getOrCreate()
val path = "/Users/hadoop/data/test.json"
val fileRDD = spark.read.json(path)
fileRDD.createOrReplaceTempView("test")
spark.sql("select * from test").show()
}
RDD转换成为DataFrame的更多相关文章
- Spark之 RDD转换成DataFrame的Scala实现
依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2. ...
- Spark SQL中 RDD 转换到 DataFrame (方法二)
强调它与方法一的区别:当DataFrame的数据结构不能够被提前定义.例如:(1)记录结构已经被编码成字符串 (2) 结构在文本文件中,可能需要为不同场景分别设计属性等以上情况出现适用于以下方法.1. ...
- Spark SQL中 RDD 转换到 DataFrame
1.people.txtsoyo8, 35小周, 30小华, 19soyo,882./** * Created by soyo on 17-10-10. * 利用反射机制推断RDD模式 */impor ...
- 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( ...
- RDD转换DataFrame
Spark SQL有两种方法将RDD转为DataFrame. 1. 使用反射机制,推导包含指定类型对象RDD的schema.这种基于反射机制的方法使代码更简洁,而且如果你事先知道数据schema,推荐 ...
- sparksql 动态设置schema将rdd转换成dataset/dataframe
java public class DynamicDemo { private static SparkConf conf = new SparkConf().setAppName("dyn ...
- 如何使用隐式转换扩展DataFrame和RDD以及其他的对象
目的 DataFrame可以点出来很多方法,都是DF内置的. 比如说:df.withColumn(),df.printSchema(). 但是如果你想打印df中的分区位置信息,以及每个key有多少记录 ...
- spark的RDD如何转换为DataFrame
1.Dataset与RDD之间的交互 Spark仅支持两种方式来将RDD转成Dataset.第一种方式是使用反射来推断一个RDD所包含的对象的特定类型.这种基于反射的方式会让代码更加地简洁,当你在编写 ...
随机推荐
- 6-关于#include<bits/stdc++.h>
万能头文件#include<bits/stdc++.h> (转载) 最近在打cf时赛后翻阅别人的代码总是会发现一个陌生而奇怪的头文件#include<bits/stdc++.h& ...
- halcon的tuple算子功能总结
- Golang之排序算法
冒泡排序 package main //冒泡排序 import "fmt" func bsort(a []int) { ; i < len(a); i++ { ; j < ...
- [Selenium] 在Grid模式下打印出当前Case是在哪台Node上运行
AAAbstractFlow() public void getComputerNameOfNode(WebDriver driver){ String CIHub = Environment.get ...
- 07Mendel's First Law
Problem Figure 2. The probability of any outcome (leaf) in a probability tree diagram is given by th ...
- [operator]windows10 + zookeeper + kafka
软件版本 jdk-8u131-windows-x64 zookeeper-3.4.10.tar.gz kafka_2.11-2.0.1.tgz jdk直接就有exe安装版本,不做介绍 安装zookee ...
- Robotframework-Appium 之常用API(一)
上一遍隨筆(https://www.cnblogs.com/cnkemi/p/9639809.html)用Python + Robotframework + Appium對Android app小試牛 ...
- MSF漏洞攻击练习系统 – Metasploitable2
Metasploitable2 是Metasploit团队维护的一个集成了各种漏洞弱点的Linux主机(ubuntu)镜像,方便广大黑扩跟安全人员进行MSF漏洞测试跟学习,免去搭建各种测试环境.VMw ...
- polymer-developer guide-registration and lifecycle
注册和声明周期 my = Polymer({ is: "proto-element", created: function() { this.innerHTML = 'create ...
- memory leak-----tomcat日志warn
web应用借助于结构:spring mvc + quartz结构,部署到tomcat容器时,shutdown时的error信息: appears to have started a thread na ...