SparkSQLHive数据源实例
博客专区 > 别寒 的博客 > 博客详情
SparkSQLHive数据源实例
别寒 发表于7个月前
SparkSQLHive数据源实例
  • 发表于 7个月前
  • 阅读 4
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

package cn.hhb.spark.sql;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.hive.HiveContext;

/**
 * Created by dell on 2017/7/27.
 */
public class HiveDataSource {
    public static void main(String[] args) {

        // 创建SparkConf
        SparkConf conf = new SparkConf()
                .setAppName("HiveDataSource").setMaster("local")
                .set("spark.testing.memory", "2147480000");

        // 创建javasparkContext
        JavaSparkContext sc = new JavaSparkContext(conf);
        // 创建HiveContext,注意,这里,接收的是sparkcontext作为参数,不是javasparkcontext
        HiveContext hiveContext = new HiveContext(sc.sc());

// 第一个功能:使用hivecontext的sql() hql()方法,可以执行hive中能够执行的hive语句
        // 判断是否存在student_infos表,如果存在则删除
        hiveContext.sql("DROP TABLE IF EXISTS student_infos");
        // 判断是否不存在student_infos表,如果不存在则创建
        hiveContext.sql("DROP TABLE IF NOT EXISTS student_infos (name STRING, age INT)");
        // 将学生基本信息数据导入student_infos表
        hiveContext.sql("LOAD DATA LOCAL INPATH '/user/local/student_infos.txt' INTO TABLE student_infos");

        // 用同样的方式给student_scores导入数据
        hiveContext.sql("DROP TABLE IF EXISTS student_scores");
        hiveContext.sql("DROP TABLE IF NOT EXISTS student_scores (name STRING, age INT)");
        // 将学生基本信息数据导入student_infos表
        hiveContext.sql("LOAD DATA LOCAL INPATH '/user/local/student_scores.txt' INTO TABLE student_scores");


 // 第二个功能,执行sql还可以返回dataframe,用于查询

        // 执行sql查询,关联两张表,查询成绩大于80分的学生
        DataFrame goodStudentsDF = 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");


// 第三个功能,可以将dataframe中的数据,理论上来说,dataframe对应的rdd的元素,是row即可将dataframe中的数据保存到hive表中

        // 将dataframe中的数据保存到good_student_infos表中
        hiveContext.sql("DROP TABLE IF EXISTS good_student_infos");
        goodStudentsDF.saveAsTable("good_student_infos");


// 第四个功能,可以用table()方法,针对hive表,直接创建dataframe

        // 然后针对good_student_infos表,直接创建dataframe
        Row[] goodStudentRows = hiveContext.table("good_student_infos").collect();
        for (Row goodStudentRow : goodStudentRowss){
            System.out.println(goodStudentRow);
        }

        sc.close();
    }
}

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 28
博文 254
码字总数 130346
×
别寒
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: