下面是Java Spark结合Hive开发的案例详解:
package com.spark.sql;
import org.apache.spark.SparkConf;
import org.apache.spark.rdd.RDD;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import scala.Function1;
import scala.runtime.BoxedUnit;
public class SparkSQL_Hive_java {
public static void main(String[] args) {
/**
* 第一步:创建Spark SQL的功能入口:SparkSession
*/
// 方式一:通过SparkSession直接创建
/*SparkSession spark = SparkSession
.builder()
.appName("Spark_Hive")
.master("local[2]")
.enableHiveSupport()
.getOrCreate();*/
// 方式二:先创建SparkConf,再由SparkConf创建SparkSession
SparkConf conf = new SparkConf()
.setAppName("Spark_Hive")
.setMaster("local[2]");
SparkSession spark = SparkSession
.builder()
.config(conf)
.enableHiveSupport()
.getOrCreate();
/**
* 第二步,读取外部数据构建dataframe或dataset
*/
Dataset<Row> emp = spark.sql("select * from company.emp");
emp.createOrReplaceTempView("emp");
Dataset<Row> dept = spark.table("company.dept");
dept.createOrReplaceTempView("dept");
/**
* 第三步,使用transforamtion的dataset/dataframe api或者是写SQL进行开发
*/
// 第一种方式:基于临时视图写SQL的方式,SQL返回结果也是DataFrame
Dataset<Row> res = spark.sql("select empno,ename,job,sal," +
"dname FROM emp JOIN dept ON emp.deptno = dept.deptno");
// 第二种方式:使用DSL语句,倾向于RDD的使用方式,就是将sql的关键字封装成函数(算子)
Dataset<Row> res1 = emp.select("empno", "ename", "sal", "comm")
.where("sal > 2000");
RDD<Row> rdd1 = res.rdd();
RDD<Row> rdd2 = res1.rdd();
/**
* 第四步、输出或者打印
*/
// res.show();
// res1.show();
}
}
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。