Spark2.2.0实战中如何自动获取Json文件元数据信息注册两个临时表以及条件查询后合并相同记录数据
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关Spark2.2.0实战中如何自动获取Json文件元数据信息注册两个临时表以及条件查询后合并相同记录数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文
千家信息网最后更新 2026年11月03日Spark2.2.0实战中如何自动获取Json文件元数据信息注册两个临时表以及条件查询后合并相同记录数据
这篇文章将为大家详细讲解有关Spark2.2.0实战中如何自动获取Json文件元数据信息注册两个临时表以及条件查询后合并相同记录数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
Spark支持两个方式将RDD转换成DataFrame
1.反射;将schema信息定义在一个单独的class中,通过这个scheme转换成对应的DataFrame,这种方式简单,但不建议用,因为scala的case class最多只支持22个字段,所以必须要自己开发一个类,实现product接口。
2.通过编程接口,自己构建StruntType,将RDD转换成对应的DataFrame,这种方式稍微麻烦,官网手册列出大体三个步骤:
翻译一下大体意思:
1.创建RDD转换成JavaRDD
2.按照Row的数据结构定义StructType
3.基于StructType使用createDataFrame创建DataFrame
数据准备:
第一个json文件student.json
{"name":"ljs1","score":85}{"name":"ljs2","score":99}{"name":"ljs3","score":74}第二个json数据,直接写在了代码的低46-49行中,可直接查看代码获取
代码实例:
package com.unicom.ljs.spark220.study;import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRDD;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.api.java.JavaSparkContext;import org.apache.spark.api.java.function.Function;import org.apache.spark.api.java.function.PairFunction;import org.apache.spark.sql.*;import org.apache.spark.sql.types.DataTypes;import org.apache.spark.sql.types.StructField;import org.apache.spark.sql.types.StructType;import scala.Tuple2;import java.util.ArrayList;import java.util.List;/*** @author: Created By lujisen* @company ChinaUnicom Software JiNan* @date: 2020-01-28 21:08* @version: v1.0* @description: com.unicom.ljs.spark220.study*/public class JoinJsonData {public static void main(String[] args) {SparkConf sparkConf = new SparkConf().setMaster("local[*]").setAppName("JoinJsonData");JavaSparkContext sc=new JavaSparkContext(sparkConf);SQLContext sqlContext=new SQLContext(sc);DatasetstudentDS = sqlContext.read().json("D:\\dataML\\spark1\\student.json");
studentDS.registerTempTable("student_score");DatasetstudentNameScoreDS = sqlContext.sql("select name,score from student_score where score > 82");
ListstudentNameList= studentNameScoreDS.javaRDD().map(new Function () {
@Overridepublic String call(Row row){return row.getString(0);}}).collect();System.out.println(studentNameList.toString());ListstudentJsons=new ArrayList<>(); studentJsons.add("{\"name\":\"ljs1\",\"age\":18}");studentJsons.add("{\"name\":\"ljs2\",\"age\":17}");studentJsons.add("{\"name\":\"ljs3\",\"age\":19}");JavaRDDstudentInfos = sc.parallelize(studentJsons); DatasetstudentNameScoreRDD = sqlContext.read().json(studentInfos);
studentNameScoreRDD.schema();studentNameScoreRDD.show();studentNameScoreRDD.registerTempTable("student_age");String sql2="select name,age from student_age where name in (";for(int i=0;isql2+="'"+studentNameList.get(i)+"'";if(isql2+=",";}}sql2+=")";DatasetstudentNameAgeDS = sqlContext.sql(sql2);
JavaPairRDD> studentNameScoreAge = studentNameScoreDS.toJavaRDD().mapToPair(new PairFunction () {
@Overridepublic Tuple2call(Row row) throws Exception { return new Tuple2(row.getString(0), Integer.valueOf(String.valueOf(row.getLong(1))));}}).join(studentNameAgeDS.toJavaRDD().mapToPair(new PairFunction() {
@Overridepublic Tuple2call(Row row) throws Exception { return new Tuple2(row.getString(0), Integer.valueOf(String.valueOf(row.getLong(1))));}}));JavaRDDstudentNameScoreAgeRow = studentNameScoreAge.map(new Function
>, Row>() { @Overridepublic Row call(Tuple2> v1) throws Exception { return RowFactory.create(v1._1, v1._2._1, v1._2._2);}});ListstructFields=new ArrayList<>(); structFields.add(DataTypes.createStructField("name",DataTypes.StringType,true));structFields.add(DataTypes.createStructField("score",DataTypes.IntegerType,true));structFields.add(DataTypes.createStructField("age",DataTypes.IntegerType,true));StructType structType= DataTypes.createStructType(structFields);DatasetdataFrame = sqlContext.createDataFrame(studentNameScoreAgeRow, structType);
dataFrame.schema();dataFrame.show();dataFrame.write().format("json").mode(SaveMode.Append).save("D:\\dataML\\spark1\\studentNameScoreAge");}}
关于Spark2.2.0实战中如何自动获取Json文件元数据信息注册两个临时表以及条件查询后合并相同记录数据就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
数据
两个
信息
文件
代码
方式
相同
实战
条件
查询
内容
接口
文章
更多
知识
篇文章
支持
不错
三个
字段
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技企业
广州百单互联网科技有限公司
科技互联网项目
金融科技 互联网金融
互联网医疗科技
互联网金融公司科技
为想互联网科技
华中科技大学互联网
互联网科技小额贷款
互联网高科技股票
国外互联网科技网站
中国互联网金融科技基金
互联网科技类展会
科技大学互联网专业好不好
互联网科技热点资讯
银川新华互联网科技学校联系电话
普陀区互联网教育科技管理办法
互联网高科技行业有哪些企业
数字科技和互联网金融哪个好
互联网 科技节活动 微视频大赛
奇酷互联网络科技公司
互联网科技大会案例
济南华为互联网科技产业总部基地
中国互联网有什么科技含量
来此购互联网科技有限公司
哈尔滨屹滨互联网科技有限公司
科技类公司包括互联网吗
广州千川互联网科技有限公司
张家口科技产业互联网平台
互联网科技创业有什么好项目