Spark _25 _读取Hive中的数据加载成DataFrame/DataSet(四)
由于Hive不在本地,操作略显麻烦。不过细心一点,分析错误,也还好,如果你搭建的hadoop是HA,需要多注意:
这里指出一个错误,如果你报了同类错误,可以参考:https://georgedage.blog.csdn.net/article/details/103086882
读取Hive中的数据加载成DataFrame/DataSet
- HiveContext是SQLContext的子类,连接Hive建议使用HiveContext。
- 由于本地没有Hive环境,要提交到集群运行,提交命令:
spark-submit --master spark://henu1:7077 --executor-cores 1 --executor
-memory 2G --total-executor-cores 1 --class com.henu.HiveDemo /root/Hive-1.0-SNAPSHOT-jar-with-dependencies.jar
javaAPI:
package com.henu;import org.apache.spark.SparkConf;
import org.apache.spark.SparkContext;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SaveMode;
import org.apache.spark.sql.hive.HiveContext;/*** @author George* @description* 读取Hive中的数据加载成DataFrame**/
public class HiveDemo {public static void main(String[] args) {SparkConf conf = new SparkConf();conf.setMaster("local");conf.setAppName("hive");SparkContext sc = new SparkContext(conf);//HiveContext是SQLContext的子类。/*** 友情提示,在2.3.1中HiveContext被* SparkSession.builder.enableHiveSupport* 所替代*/HiveContext hiveContext = new HiveContext(sc);hiveContext.sql("use spark");hiveContext.sql("drop table if exists student_infos");//在hive中创建student_infos表hiveContext.sql("create table if not exists student_infos(name String,age Int)" +"row format delimited fields terminated by ' '");hiveContext.sql("load data local inpath '/root/test/student_info' into table student_infos");hiveContext.sql("drop table if exists student_scores");hiveContext.sql("create table if not exists student_scores (name String,score Int)" +"row format delimited fields terminated by ' '");hiveContext.sql("load data local inpath '/root/test/student_scores' into table student_scores");/*** 查询表生成Dataset*/Dataset<Row> dataset = hiveContext.sql("SELECT si.name, si.age, ss.score "+ "FROM student_infos si "+ "JOIN student_scores ss "+ "ON si.name=ss.name "+ "WHERE ss.score>=80");
// dataset.show();hiveContext.sql("drop table if exists good_student_infos");dataset.registerTempTable("goodstudent");
// Dataset<Row> sql = hiveContext.sql("create table good_student_infos as select * from goodstudent");Dataset<Row> sql = hiveContext.sql("select * from goodstudent");sql.show();/*** 将结果保存到hive表 good_student_infos*/dataset.write().mode(SaveMode.Overwrite).saveAsTable("good_student_infos");sc.stop();}
}
将其打包放在linux上执行:
根据代码,注意本地的数据源文件:
然后别忘了启动hadoop集群,
然后提交命令。【会有点慢】
然后进入hive中查看是否成功:
0: jdbc:hive2://henu2:10000> use spark;
No rows affected (0.35 seconds)
0: jdbc:hive2://henu2:10000> show tables;
+-----------------+--+
| tab_name |
+-----------------+--+
| student_infos |
| student_scores |
+-----------------+--+
2 rows selected (0.81 seconds)
0: jdbc:hive2://henu2:10000> select * from student_infos;
+---------------------+--------------------+--+
| student_infos.name | student_infos.age |
+---------------------+--------------------+--+
| George | 22 |
| kangkang | 20 |
| GeorgeDage | 28 |
| limu | 1 |
+---------------------+--------------------+--+
4 rows selected (0.967 seconds)
scalaAPI:
package com.henuimport org.apache.spark.sql.SaveMode
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.{SparkConf, SparkContext}object HiveScalaDemo {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("hive")val sc = new SparkContext(conf)val hiveContext = new HiveContext(sc)hiveContext.sql("use spark")hiveContext.sql("drop table if exists student_infos")//在hive中创建student_infos表hiveContext.sql("create table if not exists student_infos(name String,age Int)" +"row format delimited fields terminated by ' '")hiveContext.sql("load data local inpath '/root/test/student_info' into table student_infos")hiveContext.sql("drop table if exists student_scores")hiveContext.sql("create table if not exists student_scores (name String,score Int)" +"row format delimited fields terminated by ' '")hiveContext.sql("load data local inpath '/root/test/student_scores' into table student_scores")val df = hiveContext.sql("select si.name,si.age,ss.score from student_infos si,student_scores ss where si.name = ss.name")hiveContext.sql("drop table if exists good_student_infos")/*** 将结果写入到hive表中**/df.write.mode(SaveMode.Overwrite).saveAsTable("good_student_infos")sc.stop()}
}
说实话,那个新表我不知道,它在哪里,就是结果写入hive表。【没成功】,欢迎指正
然后我就想开了个办法:
修改了代码:
package com.henu;import org.apache.spark.SparkConf;
import org.apache.spark.SparkContext;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SaveMode;
import org.apache.spark.sql.hive.HiveContext;/*** @author George* @description* 读取Hive中的数据加载成DataFrame**/
public class HiveDemo {public static void main(String[] args) {SparkConf conf = new SparkConf();conf.setMaster("local");conf.setAppName("hive");SparkContext sc = new SparkContext(conf);//HiveContext是SQLContext的子类。/*** 友情提示,在2.3.1中HiveContext被* SparkSession.builder.enableHiveSupport* 所替代*/HiveContext hiveContext = new HiveContext(sc);hiveContext.sql("use spark");hiveContext.sql("drop table if exists student_infos");//在hive中创建student_infos表hiveContext.sql("create table if not exists student_infos(name String,age Int)" +"row format delimited fields terminated by ' '");hiveContext.sql("load data local inpath '/root/test/student_info' into table student_infos");hiveContext.sql("drop table if exists student_scores");hiveContext.sql("create table if not exists student_scores (name String,score Int)" +"row format delimited fields terminated by ' '");hiveContext.sql("load data local inpath '/root/test/student_scores' into table student_scores");/*** 查询表生成Dataset*/Dataset<Row> dataset = hiveContext.sql("SELECT si.name, si.age, ss.score "+ "FROM student_infos si "+ "JOIN student_scores ss "+ "ON si.name=ss.name "+ "WHERE ss.score>=80");
// dataset.show();hiveContext.sql("drop table if exists good_student_infos");dataset.registerTempTable("goodstudent");
// Dataset<Row> sql = hiveContext.sql("create table good_student_infos as select * from goodstudent");Dataset<Row> sql = hiveContext.sql("create table good_student_infos as select * from goodstudent");sql.show();/*** 将结果保存到hive表 good_student_infos*/dataset.write().mode(SaveMode.Overwrite).saveAsTable("good_student_infos");sc.stop();}
}
也就是这一句:
Dataset<Row> sql = hiveContext.sql("create table good_student_infos as select * from goodstudent");
貌似已经成功了:
再去查一下表:然而!!!
0: jdbc:hive2://henu2:10000> show tables;
+---------------------+--+
| tab_name |
+---------------------+--+
| good_student_infos |
| student_infos |
| student_scores |
+---------------------+--+
3 rows selected (0.653 seconds)
0: jdbc:hive2://henu2:10000> select * from good_student_infos;
+--------------------------+-------------------------+---------------------------+--+
| good_student_infos.name | good_student_infos.age | good_student_infos.score |
+--------------------------+-------------------------+---------------------------+--+
+--------------------------+-------------------------+---------------------------+--+
但最起码表生成了,只是插入数据的问题,
再做修改:
就不上代码了,因为还是没导进去,下次见。。。
Spark _25 _读取Hive中的数据加载成DataFrame/DataSet(四)相关推荐
- Spark _25.plus _使用idea读取Hive中的数据加载成DataFrame/DataSet(四)
对Spark _25 _读取Hive中的数据加载成DataFrame/DataSet(四) https://georgedage.blog.csdn.net/article/details/10309 ...
- Spark读取Hive中的数据加载为DataFrame
首先要告诉SparkSql,Hive在哪.然后读取Hive中的数据,必须开启enableHiveSupport. val spark = SparkSession.builder().appName( ...
- Spark _24 _读取JDBC中的数据创建DataFrame/DataSet(MySql为例)(三)
两种方式创建DataSet 现在数据库中创建表不能给插入少量数据. javaapi: package SparkSql;import org.apache.spark.SparkConf; impor ...
- Pytorch中的数据加载
Pytorch中的数据加载 1. 模型中使用数据加载器的目的 在前面的线性回归模型中,使用的数据很少,所以直接把全部数据放到模型中去使用. 但是在深度学习中,数据量通常是都非常多,非常大的,如此大量的 ...
- pytorch中的数据加载(dataset基类,以及pytorch自带数据集)
目录 pytorch中的数据加载 模型中使用数据加载器的目的 数据集类 Dataset基类介绍 数据加载案例 数据加载器类 pytorch自带的数据集 torchvision.datasets MIN ...
- 【学习系列7】Pytorch中的数据加载
目录 1. 模型中使用数据加载器的目的 2. 数据集类 3. 迭代数据集 1. 模型中使用数据加载器的目的 在前面的线性回归横型中,我们使用的数据很少,所以直接把全部数据放到锁型中去使用. 但是在深度 ...
- hive分区、数据加载、数据导出、数据类型
一.hive分区 1.特点: 分区表与其他表不同点在于,分区字段的值为表目录下的子目录格式 ,为: 分区字段=值 2.建表语句 create database learn2; CREATE TABLE ...
- c语言文件 加载内存吗,把文件中的数据加载到内存进行查找C语言实现.docx
把文件中的数据加载到内存进行查找C语言实现 #define _CRT_SECURE_NO_WARNINGS#include#include#includechar **pp=NULL;void ini ...
- 第七章:在Spark集群上使用文件中的数据加载成为graph并进行操作(3)
你可以调整graph的构造参数来指定partition的数量. 当数据加载完毕的时候整个web-Googel.txt就缓存进了内存之中,如下所示: 可以看到数据被缓存成了edges. 下面我们使用把m ...
最新文章
- 推荐VS2008插件CodeRush Xpress for C#
- starUML--面向对象的设计过程
- mysql安装pymyaql_python安装mysql的依赖包mysql-python操作
- cglib和jdk动态代理以及 按指定顺序排列list
- (原創) 如何在Ubuntu上啟動ADSL連線? (OS) (Linux) (Ubuntu)
- docker镜像与容器操作流程
- u盘iso安装centos5 ,centos6
- python批量裁剪图片_python实现图片批量剪切示例
- 俄勒冈健康与科学大学计算机,GE 医疗合作俄勒冈健康与科学大学,赋能虚拟ICU...
- ACM模板-f_zyj.pdf
- opencv-qr码识别
- YTU----1329: 手机尾号评分
- 北京最牛的医院 最牛的科室排名出炉
- VSCode操作小技巧
- 【C++基础】第一节课 C++基础知识
- JSP, Servlet常见面试题详解
- 关于class not fount的错误
- [导入]刘德华新片《三国志见龙卸甲》介绍
- 计算机c语言lms算法,lms算法(毕业论文).doc
- html $符号的作用,javascript 中$符号是代表什么意思!
热门文章
- 数学之美系列12(转帖)
- 洛谷 - P3379 【模板】最近公共祖先(LCA)(RMQ求LCA/Tarjan求LCA)
- CodeForces - 1350C Orac and LCM(数论)
- 洛谷 - P1028 数的计算(线性dp)
- PAT (Advanced Level) 1007 Maximum Subsequence Sum(最大连续子段和)
- 一年的第几周怎么算_外企必备,算某一天是今年第几周,用一个excel函数就搞定...
- TensorFlow2-循环神经网络
- HDU3389(阶梯博弈)
- 26.PhantomData幽灵数据.rs
- 透过汇编另眼看世界之函数调用