问题描述
由于我是 hazelcast 的新手,我是否尝试了一些东西,但没有得到我接受的结果,请帮助我。 这是我正在尝试但未成功的以下代码。
BatchSource<List> companyListBatchSource = FileSources.files("directory")
.glob("name.csv")
.format(FileFormat.csv(List.class))
.build();
pipeline.readFrom(companyListBatchSource)
.writeTo(Sinks.list("mapName"));
让我知道我们如何在 List
解决方法
如果您不想将值转换为专用记录,您可以传递一个字段名称列表,在这种情况下,您将获得一个 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;
});
});