sparksql parquet 合并元数据
java
 public class ParquetMergeSchema {
     private static SparkConf conf = new SparkConf().setAppName("parquetmergeschema").setMaster("local");
     private static JavaSparkContext jsc = new JavaSparkContext(conf);
     private static SparkSession session = new SparkSession(jsc.sc());
     public static void main(String[] args) {
         JavaRDD<Tuple2<String, Object>> rdd1 = jsc.parallelize(
                 Arrays.asList(new Tuple2<String, Object>("jack", 21), new Tuple2<String, Object>("lucy", 20)));
         JavaRDD<Row> row1 = rdd1.map(new Function<Tuple2<String, Object>, Row>() {
             private static final long serialVersionUID = 1L;
             @Override
             public Row call(Tuple2<String, Object> v1) throws Exception {
                 return RowFactory.create(v1._1, v1._2);
             }
         });
         JavaRDD<Tuple2<String, Object>> rdd2 = jsc.parallelize(
                 Arrays.asList(new Tuple2<String, Object>("jack", "A"), new Tuple2<String, Object>("yeye", "B")));
         JavaRDD<Row> row2 = rdd2.map(new Function<Tuple2<String, Object>, Row>() {
             private static final long serialVersionUID = 1L;
             @Override
             public Row call(Tuple2<String, Object> v1) throws Exception {
                 return RowFactory.create(v1._1, v1._2);
             }
         });
         StructType schema1 = DataTypes
                 .createStructType(Arrays.asList(DataTypes.createStructField("name", DataTypes.StringType, false),
                         DataTypes.createStructField("age", DataTypes.IntegerType, false)));
         StructType schema2 = DataTypes
                 .createStructType(Arrays.asList(DataTypes.createStructField("name", DataTypes.StringType, false),
                         DataTypes.createStructField("grade", DataTypes.StringType, false)
                 ));
         // 将rdd转成dataset
         Dataset<Row> ds1 = session.createDataFrame(row1, schema1);
         Dataset<Row> ds2 = session.createDataFrame(row2, schema2);
         // 保存为parquet文件
         ds1.write().mode(SaveMode.Append).save("./src/main/java/cn/tele/spark_sql/parquet/mergetest");
         ds2.write().mode(SaveMode.Append).save("./src/main/java/cn/tele/spark_sql/parquet/mergetest");
         // 指定parquet文件的目录进行读取,设置mergeSchema为true进行合并
         Dataset<Row> dataset = session.read().option("mergeSchema", true)
                 .load("./src/main/java/cn/tele/spark_sql/parquet/mergetest");
         dataset.printSchema();
         dataset.show();
         session.stop();
         jsc.close();
     }
 }
scala
 object ParquetMergeSchema {
   def main(args: Array[String]): Unit = {
     val conf = new SparkConf().setAppName("parquetmergeschema").setMaster("local")
     val sc = new SparkContext(conf)
     val sqlContext = new SQLContext(sc)
     val rdd1 = sc.parallelize(Array(("jack", 18), ("tele", 20)), 2).map(tuple => { Row(tuple._1, tuple._2) })
     val rdd2 = sc.parallelize(Array(("tele", "A"), ("wyc", "A"), ("yeye", "C")), 2).map(tuple => { Row(tuple._1, tuple._2) })
     //schema
     val schema1 = DataTypes.createStructType(Array(
       StructField("name", DataTypes.StringType, false),
       StructField("age", DataTypes.IntegerType, false)))
     val schema2 = DataTypes.createStructType(Array(
       StructField("name", DataTypes.StringType, false),
       StructField("grade", DataTypes.StringType, false)))
     //转换
     val df1 = sqlContext.createDataFrame(rdd1, schema1)
     val df2 = sqlContext.createDataFrame(rdd2, schema2)
     //写出
     df1.write.mode(SaveMode.Append).save("./src/main/scala/cn/tele/spark_sql/parquet/mergetest")
     df2.write.mode(SaveMode.Append).save("./src/main/scala/cn/tele/spark_sql/parquet/mergetest")
     //读取进行合并
     val df = sqlContext.read.option("mergeSchema", true).parquet("./src/main/scala/cn/tele/spark_sql/parquet/mergetest")
     df.printSchema()
     df.show()
   }
 }
sparksql parquet 合并元数据的更多相关文章
- parquet 合并元数据
		合并元数据:两个数据集,有着一部分相同的列,将他们合并成一个数据集时merge的过程. 合并的规则:相同的列,在新的数据集中,是通用的列, 各自不同的列,也作为新的数据集的列. Spark将数据写入到 ... 
- 39、Parquet数据源之自动分区推断&合并元数据
		一.自动分区推断 1.概述 表分区是一种常见的优化方式,比如Hive中就提供了表分区的特性.在一个分区表中,不同分区的数据通常存储在不同的目录中, 分区列的值通常就包含在了分区目录的目录名中.Spar ... 
- spark on yarn模式下配置spark-sql访问hive元数据
		spark on yarn模式下配置spark-sql访问hive元数据 目的:在spark on yarn模式下,执行spark-sql访问hive的元数据.并对比一下spark-sql 和hive ... 
- 【Hadoop】namenode与secondarynamenode的checkpoint合并元数据
		Checkpoint Node(检查点节点) NameNode persists its namespace using two files: fsimage, which is the latest ... 
- sparksql parquet 分区推断Partition Discovery
		网上找的大部分资料都很旧,最后翻了下文档只找到了说明 大概意思是1.6之后如果想要使用分区推断就要设置数据源的basePath,因此代码如下 java public class ParitionInf ... 
- sparksql json 合并json数据
		java public class Demo { private static SparkConf conf = new SparkConf().setAppName("demo" ... 
- load、save方法、spark sql的几种数据源
		load.save方法的用法 DataFrame usersDF = sqlContext.read().load("hdfs://spark1:9000/users.pa ... 
- 【Spark篇】---SparkSQL初始和创建DataFrame的几种方式
		一.前述 1.SparkSQL介绍 Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制. SparkSQL支持查询原 ... 
- 【Spark-SQL学习之二】 SparkSQL DataFrame创建和储存
		环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ... 
随机推荐
- Servlet的异常处理机制
			一 声明式异常处理 在web.xml中对声明对各种异常的处理方法. 通过 <error-page>元素来声明. 此元素的结构如下: +------ ... 
- 本文介绍C# BitmapData
			本文介绍C# BitmapData,对于C# BitmapData,虽然BitmapData.Width还是等于Bitmap.Width,但大概是出于显示性能的考虑. 最近要转开发平台,正研究C# ... 
- 【CodeForces】Gargari and Bishops
			依据贪心能够知道,放置的教主必须不能相互攻击到(也就是不在一条对角线上)才干够使得结果最大化. 依据观察能够得到教主相互不攻击的条件是他的坐标和互为奇偶(x + y) 之后直接暴力,处理每一个坐标对角 ... 
- Altium Designer如何调整鼠标形状
			在 里面有一个 
- 【例题 6-16 UVa 10129】Play on Words
			[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 入度减去出度个数为1的点和为-1的点各有1个,然后其他点入度减去出度为0 或者全都是入度为0的点即可. [代码] #include ... 
- 【Codeforces Round #445 (Div. 2) A】ACM ICPC
			[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 三重循环 [代码] #include <bits/stdc++.h> using namespace std; int ... 
- 【Codeforces Round #301 (Div. 2) B】 School Marks
			[链接] 我是链接,点我呀:) [题意] 已知k门成绩. 总共有n门成绩. 让你构造剩下的n-k门成绩,使得这n门成绩的中位数>=y,并且这n门成绩的和要小于等于x. n为奇数 [题解] 首先判 ... 
- Java FutureTask Example Program(Java FutureTask例子)
			Sometime back I wrote a post about Java Callable Future interfaces that we can use to get the concur ... 
- Tomcat基础配置和高级配置
			********** 第一部分 Tomcat基础配置 *********** 一.Apatch Tomcat 在win下配置 大部分转载自:http://blog.csdn.net/liuhao ... 
- 优雅地使用Retrofit+RxJava(二)
			前言 在我上一篇讲Retrofit+RxJava在MVP模式中优雅地处理异常(一)中,发现非常多网友发邮箱给我表示期待我的下一篇文章,正好趁着清明假期.我就写写平时我在使用RxJava+Retrofi ... 
