由于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(四)相关推荐

  1. Spark _25.plus _使用idea读取Hive中的数据加载成DataFrame/DataSet(四)

    对Spark _25 _读取Hive中的数据加载成DataFrame/DataSet(四) https://georgedage.blog.csdn.net/article/details/10309 ...

  2. Spark读取Hive中的数据加载为DataFrame

    首先要告诉SparkSql,Hive在哪.然后读取Hive中的数据,必须开启enableHiveSupport. val spark = SparkSession.builder().appName( ...

  3. Spark _24 _读取JDBC中的数据创建DataFrame/DataSet(MySql为例)(三)

    两种方式创建DataSet 现在数据库中创建表不能给插入少量数据. javaapi: package SparkSql;import org.apache.spark.SparkConf; impor ...

  4. Pytorch中的数据加载

    Pytorch中的数据加载 1. 模型中使用数据加载器的目的 在前面的线性回归模型中,使用的数据很少,所以直接把全部数据放到模型中去使用. 但是在深度学习中,数据量通常是都非常多,非常大的,如此大量的 ...

  5. pytorch中的数据加载(dataset基类,以及pytorch自带数据集)

    目录 pytorch中的数据加载 模型中使用数据加载器的目的 数据集类 Dataset基类介绍 数据加载案例 数据加载器类 pytorch自带的数据集 torchvision.datasets MIN ...

  6. 【学习系列7】Pytorch中的数据加载

    目录 1. 模型中使用数据加载器的目的 2. 数据集类 3. 迭代数据集 1. 模型中使用数据加载器的目的 在前面的线性回归横型中,我们使用的数据很少,所以直接把全部数据放到锁型中去使用. 但是在深度 ...

  7. hive分区、数据加载、数据导出、数据类型

    一.hive分区 1.特点: 分区表与其他表不同点在于,分区字段的值为表目录下的子目录格式 ,为: 分区字段=值 2.建表语句 create database learn2; CREATE TABLE ...

  8. c语言文件 加载内存吗,把文件中的数据加载到内存进行查找C语言实现.docx

    把文件中的数据加载到内存进行查找C语言实现 #define _CRT_SECURE_NO_WARNINGS#include#include#includechar **pp=NULL;void ini ...

  9. 第七章:在Spark集群上使用文件中的数据加载成为graph并进行操作(3)

    你可以调整graph的构造参数来指定partition的数量. 当数据加载完毕的时候整个web-Googel.txt就缓存进了内存之中,如下所示: 可以看到数据被缓存成了edges. 下面我们使用把m ...

最新文章

  1. 推荐VS2008插件CodeRush Xpress for C#
  2. starUML--面向对象的设计过程
  3. mysql安装pymyaql_python安装mysql的依赖包mysql-python操作
  4. cglib和jdk动态代理以及 按指定顺序排列list
  5. (原創) 如何在Ubuntu上啟動ADSL連線? (OS) (Linux) (Ubuntu)
  6. docker镜像与容器操作流程
  7. u盘iso安装centos5 ,centos6
  8. python批量裁剪图片_python实现图片批量剪切示例
  9. 俄勒冈健康与科学大学计算机,GE 医疗合作俄勒冈健康与科学大学,赋能虚拟ICU...
  10. ACM模板-f_zyj.pdf
  11. opencv-qr码识别
  12. YTU----1329: 手机尾号评分
  13. 北京最牛的医院 最牛的科室排名出炉
  14. VSCode操作小技巧
  15. 【C++基础】第一节课 C++基础知识
  16. JSP, Servlet常见面试题详解
  17. 关于class not fount的错误
  18. [导入]刘德华新片《三国志见龙卸甲》介绍
  19. 计算机c语言lms算法,lms算法(毕业论文).doc
  20. html $符号的作用,javascript 中$符号是代表什么意思!

热门文章

  1. 数学之美系列12(转帖)
  2. 洛谷 - P3379 【模板】最近公共祖先(LCA)(RMQ求LCA/Tarjan求LCA)
  3. CodeForces - 1350C Orac and LCM(数论)
  4. 洛谷 - P1028 数的计算(线性dp)
  5. PAT (Advanced Level) 1007 Maximum Subsequence Sum(最大连续子段和)
  6. 一年的第几周怎么算_外企必备,算某一天是今年第几周,用一个excel函数就搞定...
  7. TensorFlow2-循环神经网络
  8. HDU3389(阶梯博弈)
  9. 26.PhantomData幽灵数据.rs
  10. 透过汇编另眼看世界之函数调用