Spark2通过SparkSQL读写Hive数据的示例

栏目: 服务器 · 发布时间: 6年前

内容简介:说明都在代码中:

说明都在代码中:

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;
    }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Iterative Methods for Sparse Linear Systems, Second Edition

Iterative Methods for Sparse Linear Systems, Second Edition

Yousef Saad / Society for Industrial and Applied Mathematics / 2003-04-30 / USD 102.00

Tremendous progress has been made in the scientific and engineering disciplines regarding the use of iterative methods for linear systems. The size and complexity of linear and nonlinear systems arisi......一起来看看 《Iterative Methods for Sparse Linear Systems, Second Edition》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具