SparkSQLHive数据源实例

原创
2017/07/27 16:05
阅读数 8
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();
    }
}

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
在线直播报名
返回顶部
顶部