-
import java.io.File;
-
import org.apache.spark.api.java.JavaRDD;
-
import org.apache.spark.sql.Dataset;
-
import org.apache.spark.sql.Row;
-
import org.apache.spark.sql.SparkSession;
-
/**
-
* ClassName:SparkReadWriteHiveTest <br/>
-
* Date: 2018年8月15日 下午1:37:26 <br/>
-
*
-
* @author fenglibin
-
* @version
-
* @see
-
*/
-
public class SparkReadWriteHiveTest {
-
public static void main(String[] args) {
-
/*
-
* test_source_table结构如下,包括key和value两列,如下:
-
* key, value
-
* k1, 123
-
* k2, 234
-
*/
-
String sql = "SELECT * FROM test_source_table_hive";
-
// warehouseLocation 指定管理数据库和表的默认位置
-
String warehouseLocation = new File("spark-warehouse").getAbsolutePath();
-
SparkSession sparkSession = SparkSession.builder().appName("Java Spark Hive Example").config("spark.sql.warehouse.dir",
-
warehouseLocation).enableHiveSupport().getOrCreate();
-
// SQL查询的结果本身是DataFrames,支持所有正常的功能操作。
-
Dataset<Row> sqlDF = sparkSession.sql(sql);
-
// 将数据转换为RDD然后处理
-
JavaRDD<Obj> resultRDD = sqlDF.javaRDD().map(row -> {
-
Obj obj = new Obj();
-
obj.setKey(row.getAs("key"));
-
obj.setValue(Long.parseLong(row.getAs("value")) * 1000);
-
return obj;
-
});
-
// 将RDD转换为Dataset
-
Dataset<Row> tempResult = sparkSession.createDataFrame(resultRDD, Obj.class);
-
// 将Dataset关联为临时视图test_desc_table_temp_hive,后续SQL操作中可使用
-
tempResult.createOrReplaceTempView("test_desc_table_temp_hive");
-
/*
-
* test_desc_table_hive结构如下,包括key和value两列,如下:
-
* key, value
-
* k1, 123
-
* k2, 234
-
*/
-
//将计算结果写出到hive中的目标表:test_desc_table_hive
-
sparkSession.sql("insert into default.test_desc_table_hive select * from test_desc_table_temp_hive");
-
sparkSession.close();
-
}
-
}
-
class Obj {
-
private String key;
-
private long value;
-
public String getKey() {
-
return key;
-
}
-
public void setKey(String key) {
-
this.key = key;
-
}
-
public long getValue() {
-
return value;
-
}
-
public void setValue(long value) {
-
this.value = value;
-
}
-
import java.io.File;
-
import org.apache.spark.api.java.JavaRDD;
-
import org.apache.spark.sql.Dataset;
-
import org.apache.spark.sql.Row;
-
import org.apache.spark.sql.SparkSession;
-
/**
-
* ClassName:SparkReadWriteHiveTest <br/>
-
* Date: 2018年8月15日 下午1:37:26 <br/>
-
*
-
* @author fenglibin
-
* @version
-
* @see
-
*/
-
public class SparkReadWriteHiveTest {
-
public static void main(String[] args) {
-
/*
-
* test_source_table结构如下,包括key和value两列,如下:
-
* key, value
-
* k1, 123
-
* k2, 234
-
*/
-
String sql = "SELECT * FROM test_source_table_hive";
-
// warehouseLocation 指定管理数据库和表的默认位置
-
String warehouseLocation = new File("spark-warehouse").getAbsolutePath();
-
SparkSession sparkSession = SparkSession.builder().appName("Java Spark Hive Example").config("spark.sql.warehouse.dir",
-
warehouseLocation).enableHiveSupport().getOrCreate();
-
// SQL查询的结果本身是DataFrames,支持所有正常的功能操作。
-
Dataset<Row> sqlDF = sparkSession.sql(sql);
-
// 将数据转换为RDD然后处理
-
JavaRDD<Obj> resultRDD = sqlDF.javaRDD().map(row -> {
-
Obj obj = new Obj();
-
obj.setKey(row.getAs("key"));
-
obj.setValue(Long.parseLong(row.getAs("value")) * 1000);
-
return obj;
-
});
-
// 将RDD转换为Dataset
-
Dataset<Row> tempResult = sparkSession.createDataFrame(resultRDD, Obj.class);
-
// 将Dataset关联为临时视图test_desc_table_temp_hive,后续SQL操作中可使用
-
tempResult.createOrReplaceTempView("test_desc_table_temp_hive");
-
/*
-
* test_desc_table_hive结构如下,包括key和value两列,如下:
-
* key, value
-
* k1, 123
-
* k2, 234
-
*/
-
//将计算结果写出到hive中的目标表:test_desc_table_hive
-
sparkSession.sql("insert into default.test_desc_table_hive select * from test_desc_table_temp_hive");
-
sparkSession.close();
-
}
-
}
-
class Obj {
-
private String key;
-
private long value;
-
public String getKey() {
-
return key;
-
}
-
public void setKey(String key) {
-
this.key = key;
-
}
-
public long getValue() {
-
return value;
-
}
-
public void setValue(long value) {
-
this.value = value;
-
}