如何以 List<Map> 或 JsonArray 格式在 Hazelcast jet 中读取 CSV?

问题描述

由于我是 hazelcast 的新手,我是否尝试了一些东西,但没有得到我接受的结果,请帮助我。 这是我正在尝试但未成功的以下代码。

 BatchSource<List> companyListBatchSource = FileSources.files("directory")
                .glob("name.csv")
                .format(FileFormat.csv(List.class))
                .build();

            pipeline.readFrom(companyListBatchSource)
                .writeTo(Sinks.list("mapName"));

让我知道我们如何在 List> 或 JsonArray 中读取它?

解决方法

如果您不想将值转换为专用记录,您可以传递一个字段名称列表,在这种情况下,您将获得一个 String[] 作为记录。

List<String> fieldNames = new ArrayList<>();
fieldNames.add("foo");
fieldNames.add("bar");
BatchSource<String[]> source = FileSources.files("directory")
    .glob("file.csv")
    .format(FileFormat.csv(fieldNames))
    .build();

如果您事先不知道这些字段,您可以将 null 作为字段名称列表传递。

您还可以创建如下所示的自定义文件源

    BatchSource<Map<String,String>> source = Sources.filesBuilder("directory")
            .glob("file.csv")
            .build(path -> {
                Stream<String> lines = Files.lines(path);
                String[][] headers = new String[1][];
                return lines.filter(line -> {
                    if (headers[0] == null) {
                        headers[0] = line.split(",");
                        return false;
                    }
                    return true;
                }).map(line -> {
                    String[] values = line.split(",");
                    Map<String,String> map = new HashMap<>();
                    for (int i = 0; i < headers[0].length; i++) {
                        String header = headers[0][i];
                        String value = values[i];
                        map.put(header,value);
                    }
                    return map;
                });
            });

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...