spark中的hive

  1.  
  2. import java.io.File;

  3.  
  4. import org.apache.spark.api.java.JavaRDD;

  5. import org.apache.spark.sql.Dataset;

  6. import org.apache.spark.sql.Row;

  7. import org.apache.spark.sql.SparkSession;

  8.  
  9. /**

  10. * ClassName:SparkReadWriteHiveTest <br/>

  11. * Date: 2018年8月15日 下午1:37:26 <br/>

  12. *

  13. * @author fenglibin

  14. * @version

  15. * @see

  16. */

  17. public class SparkReadWriteHiveTest {

  18.  
  19. public static void main(String[] args) {

  20. /*

  21. * test_source_table结构如下,包括key和value两列,如下:

  22. * key, value

  23. * k1, 123

  24. * k2, 234

  25. */

  26. String sql = "SELECT * FROM test_source_table_hive";

  27. // warehouseLocation 指定管理数据库和表的默认位置

  28. String warehouseLocation = new File("spark-warehouse").getAbsolutePath();

  29. SparkSession sparkSession = SparkSession.builder().appName("Java Spark Hive Example").config("spark.sql.warehouse.dir",

  30. warehouseLocation).enableHiveSupport().getOrCreate();

  31. // SQL查询的结果本身是DataFrames,支持所有正常的功能操作。

  32. Dataset<Row> sqlDF = sparkSession.sql(sql);

  33.  
  34. // 将数据转换为RDD然后处理

  35. JavaRDD<Obj> resultRDD = sqlDF.javaRDD().map(row -> {

  36. Obj obj = new Obj();

  37. obj.setKey(row.getAs("key"));

  38. obj.setValue(Long.parseLong(row.getAs("value")) * 1000);

  39. return obj;

  40. });

  41.  
  42. // 将RDD转换为Dataset

  43. Dataset<Row> tempResult = sparkSession.createDataFrame(resultRDD, Obj.class);

  44. // 将Dataset关联为临时视图test_desc_table_temp_hive,后续SQL操作中可使用

  45. tempResult.createOrReplaceTempView("test_desc_table_temp_hive");

  46. /*

  47. * test_desc_table_hive结构如下,包括key和value两列,如下:

  48. * key, value

  49. * k1, 123

  50. * k2, 234

  51. */

  52. //将计算结果写出到hive中的目标表:test_desc_table_hive

  53. sparkSession.sql("insert into default.test_desc_table_hive select * from test_desc_table_temp_hive");

  54. sparkSession.close();

  55. }

  56. }

  57. class Obj {

  58. private String key;

  59. private long value;

  60.  
  61. public String getKey() {

  62. return key;

  63. }

  64.  
  65. public void setKey(String key) {

  66. this.key = key;

  67. }

  68.  
  69. public long getValue() {

  70. return value;

  71. }

  72.  
  73. public void setValue(long value) {

  74. this.value = value;

  75. }

  76.  
  77.  
  1.  
  2. import java.io.File;

  3.  
  4. import org.apache.spark.api.java.JavaRDD;

  5. import org.apache.spark.sql.Dataset;

  6. import org.apache.spark.sql.Row;

  7. import org.apache.spark.sql.SparkSession;

  8.  
  9. /**

  10. * ClassName:SparkReadWriteHiveTest <br/>

  11. * Date: 2018年8月15日 下午1:37:26 <br/>

  12. *

  13. * @author fenglibin

  14. * @version

  15. * @see

  16. */

  17. public class SparkReadWriteHiveTest {

  18.  
  19. public static void main(String[] args) {

  20. /*

  21. * test_source_table结构如下,包括key和value两列,如下:

  22. * key, value

  23. * k1, 123

  24. * k2, 234

  25. */

  26. String sql = "SELECT * FROM test_source_table_hive";

  27. // warehouseLocation 指定管理数据库和表的默认位置

  28. String warehouseLocation = new File("spark-warehouse").getAbsolutePath();

  29. SparkSession sparkSession = SparkSession.builder().appName("Java Spark Hive Example").config("spark.sql.warehouse.dir",

  30. warehouseLocation).enableHiveSupport().getOrCreate();

  31. // SQL查询的结果本身是DataFrames,支持所有正常的功能操作。

  32. Dataset<Row> sqlDF = sparkSession.sql(sql);

  33.  
  34. // 将数据转换为RDD然后处理

  35. JavaRDD<Obj> resultRDD = sqlDF.javaRDD().map(row -> {

  36. Obj obj = new Obj();

  37. obj.setKey(row.getAs("key"));

  38. obj.setValue(Long.parseLong(row.getAs("value")) * 1000);

  39. return obj;

  40. });

  41.  
  42. // 将RDD转换为Dataset

  43. Dataset<Row> tempResult = sparkSession.createDataFrame(resultRDD, Obj.class);

  44. // 将Dataset关联为临时视图test_desc_table_temp_hive,后续SQL操作中可使用

  45. tempResult.createOrReplaceTempView("test_desc_table_temp_hive");

  46. /*

  47. * test_desc_table_hive结构如下,包括key和value两列,如下:

  48. * key, value

  49. * k1, 123

  50. * k2, 234

  51. */

  52. //将计算结果写出到hive中的目标表:test_desc_table_hive

  53. sparkSession.sql("insert into default.test_desc_table_hive select * from test_desc_table_temp_hive");

  54. sparkSession.close();

  55. }

  56. }

  57. class Obj {

  58. private String key;

  59. private long value;

  60.  
  61. public String getKey() {

  62. return key;

  63. }

  64.  
  65. public void setKey(String key) {

  66. this.key = key;

  67. }

  68.  
  69. public long getValue() {

  70. return value;

  71. }

  72.  
  73. public void setValue(long value) {

  74. this.value = value;

  75. }

  76.  
  77.  

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值