Я мало что знаю об искре, но это можно сделать с помощью Java, как показано ниже:
Подход
1. Считать данные на строку из существующего CSV вa List.
2. Введите список, чтобы собрать данные для каждого датчика в карту, т. е. сопоставить имя датчика с продуктом.
3. Выполните итерацию по карте, чтобы иметь 2D-матрицу, где размер будет равен максимальному размеру столбцалюбой датчик на количество клавиш, т.е. датчик
Следовательно, код для того же
public static void main(String[] args) throws IOException {
Path filePath = new File("C:\\Users\\Sample\\Untitled.csv").toPath();
Charset charset = Charset.defaultCharset();
List<String> lines = Files.readAllLines(filePath, charset);
Map<String, List<String>> map = new HashMap<String, List<String>>();
for(int i=1; i<lines.size(); i++) {
String[] data = lines.get(i).split(",");
List<String> sesnorDataList = map.get(data[0]);
if(sesnorDataList!=null) {
sesnorDataList.add(data[1]);
}else {
List<String> value = new ArrayList<String>();
value.add(data[1]);
map.put(data[0], value);
}
}
//to find max size of list among all sensors
int maxLength = 0;
for (List<String> list : map.values()) {
if(list.size()>=maxLength) {
maxLength = list.size();
}
}
String[][] csvData = new String[maxLength+1][map.keySet().size()];
int counter=0;
for (String header : map.keySet()) {
csvData[0][counter] = header;
counter++;
}
counter=0;
for (Entry<String, List<String>> entry : map.entrySet()) {
List<String> value = entry.getValue();
for(int i=0 ;i<value.size(); i++) {
csvData[i+1][counter] = value.get(i);
}
counter++;
}
//Printing 2D array can be written to another csv
for(int i=0; i<csvData.length;i++) {
for(int j=0; j<csvData[i].length; j++) {
System.out.print(csvData[i][j]+",");
}
System.out.println();
}
}
вход
Sensor,Value,Timestamp
Sensor 1,1234,XYZ
Sensor 2,1342,XYZ+1
Sensor 3,2545,XYZ+3
Sensor 1,1434,XYZ+n
Sensor 2,1523,XYZ+n+1
Sensor 3,7112,XYZ+8
выход
Sensor 2,Sensor 3,Sensor 1,
1342,2545,1234,
1523,7112,1434,