在HIVE的JDBCTemplate结果上使用Java8流

问题描述 投票:0回答:1

我正在使用jdbcTemplate查询配置单元,然后将结果写入.csv文件。我基本上只是生成一个对象列表,然后蒸一下列表以将每个记录写入文件。我希望将结果从配置单元返回时进行流处理,然后将其写入文件中,而不是等待整个过程然后进行处理。谁能指出我正确的方向?谢谢!

private List<Avs> queryAvsData(String asSql) {
    List<Avs> llistAvs = new ArrayList<Avs>();
    List<Map<String, Object>> rows = hiveJdbcTemplate.queryForList(asSql);
    Iterator<Map<String, Object>> it = rows.iterator();
    while (it.hasNext()) {
        Map<String, Object> row = it.next();
        Avs laAvs = Avs.builder()
                .make((String) row.get("make"))
                .model((String) row.get("model"))
                .build();
        llistAvs.add(laAvs);
    }
    return llistAvs;
}
hive java-stream jdbctemplate
1个回答
0
投票

看起来没有内置的解决方案,但是您可以做到这一点。基本上,您将现有功能包装在迭代器中,然后使用拆分器将其转换为流。 Here's a blog post on the subject:

该代码实现Spring的ResultSetExtractor接口,这是一个单一抽象方法(SAM)接口,允许使用lambda表达式来实现它。

该实现将SQL ResultSet包装在迭代器中,使用Spliterators和StreamSupport实用工具类构造流,并将其应用于采用行集流并返回通用结果的Function。

© www.soinside.com 2019 - 2024. All rights reserved.