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

}

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

查看所有标签

猜你喜欢:

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

九败一胜

九败一胜

李志刚 / 北京联合出版公司 / 2014-9-1 / 42.00元

所有的创业者都面临着很多问题,困惑不是个人的,是有共性的。 除了自身去摸索着石头走路,他们还可以通过学习,从那些在创业路上走得更远的创业者身上学到经验、教训。 这本书的主角——王兴,恰好就是一个很好的学习对象。出生于1979年的王兴,很早就创业了,2004他就开始和同学一块创业,2005年做出了校内网;2007年,他又做出了饭否网——这是中国最早的类似twitter的网站。 ......一起来看看 《九败一胜》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具