sparksql 动态设置schema将rdd转换成dataset/dataframe
java
public class DynamicDemo {
private static SparkConf conf = new SparkConf().setAppName("dynamicdemo").setMaster("local");
private static JavaSparkContext jsc = new JavaSparkContext(conf);
private static SparkSession session = new SparkSession(jsc.sc());
public static void main(String[] args) {
// 创建rdd
JavaRDD<String> rdd = jsc.textFile("./src/main/java/cn/tele/spark_sql/rdd2dataset/students.txt");
// 创建Row的rdd
JavaRDD<Row> rowRdd = rdd.map(new Function<String, Row>() {
private static final long serialVersionUID = 1L;
@Override
public Row call(String v1) throws Exception {
String[] fields = v1.split(",");
return RowFactory.create(Integer.valueOf(fields[0]), fields[1], Integer.valueOf(fields[2]));
}
});
// 创建schema
StructType schema = DataTypes
.createStructType(Arrays.asList(DataTypes.createStructField("id", DataTypes.IntegerType, false),
DataTypes.createStructField("name", DataTypes.StringType, false),
DataTypes.createStructField("age", DataTypes.IntegerType, false)));
// 转换
Dataset<Row> dataset = session.createDataFrame(rowRdd, schema);
dataset.createOrReplaceTempView("students");
Dataset<Row> result = session.sql("select * from students where age<=18");
result.show();
session.stop();
jsc.close();
}
}
scala
object DynamicDemo {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("reflectdemo").setMaster("local")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
//创建rdd
val rdd = sc.textFile("./src/main/scala/cn/tele/spark_sql/rdd2dataframe/students.txt", 8)
val rowRdd = rdd.map(lines => {
val arr = lines.split(",");
Row(arr(0).trim().toInt, arr(1), arr(2).trim().toInt)
})
val schema = DataTypes.createStructType(Array(
/* DataTypes.createStructField("id",DataTypes.IntegerType,false),
DataTypes.createStructField("name",DataTypes.StringType,false),
DataTypes.createStructField("age",DataTypes.IntegerType,false)*/
StructField("id", DataTypes.IntegerType, false),
StructField("name", DataTypes.StringType, false),
StructField("age", DataTypes.IntegerType, false)))
//转换
val dataframe = sqlContext.createDataFrame(rowRdd, schema)
dataframe.createOrReplaceTempView("students")
val result = sqlContext.sql("select * from students where age<=18")
result.show()
}
}
sparksql 动态设置schema将rdd转换成dataset/dataframe的更多相关文章
- sparksql 用反射的方式将rdd转换成dataset/dataframe
java public class ReflectionDemo { private static SparkConf conf = new SparkConf().setAppName(" ...
- Spark之 RDD转换成DataFrame的Scala实现
依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2. ...
- RDD转换成DataFrames
官方提供了2种方法 1.利用反射来推断包含特定类型对象的RDD的schema.这种方法会简化代码并且在你已经知道schema的时候非常适用. 先创建一个bean类 case class Person( ...
- [C#]Winform后台提交数据且获取远程接口返回的XML数据,转换成DataSet
#region 接口返回的Xml转换成DataSet /// <summary> /// 返回的Xml转换成DataSet /// </summary> /// <par ...
- TXT文件转换成DataSet数据集
/// <summary> /// TXT文件转换成DataSet数据集 /// </summary> /// <param name="FilePath&qu ...
- c#将List<T>转换成DataSet
/// <summary> /// List<T> 转换成DataSet /// </summary> /// &l ...
- Spark中RDD转换成DataFrame的两种方式(分别用Java和Scala实现)
一:准备数据源 在项目下新建一个student.txt文件,里面的内容为: ,zhangsan, ,lisi, ,wanger, ,fangliu, 二:实现 Java版: 1.首先新建一个s ...
- vs 设置自动缩进tab转换成空格
工具 选项 文本编辑器 如下图 选中插入空格 使用技巧: 按Ctrl+K+F组合键,可以自动进行代码对齐.
- C# 将XML转换成DataSet【转】
XmlDocument xml = new XmlDocument();xml.LoadXml(str); //str:具有xml格式的字符串 XmlNodeReader reader = new X ...
随机推荐
- JSP与Servlet的介绍说明
什么是Servlet和JSP 用Java开发Web应用程序时用到的技术主要有两种,即Servlet和JSP. Servlet是在服务器端执行的Java程序,一个被称为Servlet容器的程序(其实就是 ...
- 12.SpringBoot+MyBatis(XML)+Druid
转自:https://www.cnblogs.com/MaxElephant/p/8108342.html 主要是在Spring Boot中集成MyBatis,可以选用基于注解的方式,也可以选择xml ...
- Java核心技术 卷Ⅰ 基础知识(7)
第13章 集合 集合接口 具体的集合 在表中,除了Map结尾的类之外,其他类都实现了Collection接口,而以Map结尾的类实现了Map接口. 链表 数组列表 散列集 树集 双端队列 优先级队列 ...
- MySQL 概述和基础
# MySQL 概述 什么是数据库 存储数据的仓库 都有哪些公司在用数据库 金融机构.游戏网站.购物网站.论坛网站-- 提供数据库服务的软件 MySQL.Oracle.SQL Server.DB2.M ...
- amazeui页面分析2
amazeui页面分析2 一.总结 1.弄清结构:这些部分都是一块一块分好了的,掌握结构之后,想替换哪块就替换哪块,想不要哪块就不要哪块,非常简单的 2.一块一块:替换十分简单 3.弄清楚大块之后,然 ...
- LA 3644 - X-Plosives ( 也即UVA 1160)
LA看题 请点击:传送门 UVA 上也有这题 :UVA 1160 - X-Plosives 题目大意就是如果车上存在 k 个简单化合物,正好包含 k 种元素 ,那么它们将有危险,此时你应该拒绝装车. ...
- (转)nginx的root和alias指令的区别
转自 http://www.cnblogs.com/tintin1926/archive/2012/07/11/2586813.html nginx配置下有两个指定目录的执行,root和alias ...
- 图解UNIX的I/O模型
版权声明:本文为博主原创文章,转载请注明出处: leehao.me https://blog.csdn.net/lihao21/article/details/51620374 一.简述 UNIX系统 ...
- 15.1 linux操作系统下nand flash驱动框架2
当我们需要在操作系统上读写普通文件的时候,总是需要一层层往下,最终到达硬件相关操作,当然底层设备大多数都是块设备 NAND FLASH就作为一个最底层的块设备. 而写驱动,就是要构建硬件与操作系统之间 ...
- LDR: LdrpWalkImportDescriptor() failed to probe C:\WINDOWS\system32\opencv_core243d.dll for its manifest, ntstatus 0xc0150002
LDR: LdrpWalkImportDescriptor() failed to probe C:\WINDOWS\system32\opencv_core243d.dll for its mani ...