У меня есть файл hdfs со следующими данными
key1=value1 key2=value2 key3=value3...
key1=value11 key2=value12 key3=value13..
Мы используем и внутреннюю структуру, которая дает набор данных в качестве входных данных для метода Java, который должен быть преобразован, как показано ниже, и помещен в таблицу кустов
- ключи должны быть именами столбцов куста
- Строка, сформированная после разделения набора данных с = в качестве разделителя и выбора значения справа
Ожидаемый результат:
key1 | key 2 | key3
----------+-------------+----------
value1 | value2 | value3
value11 | value12 | value13
В файле Hdfs будет примерно 60 пар ключ-значение, поэтому невозможно вручную выполнить withcolumn () для набора данных.Любая помощь приветствуется.
Edit1: Это то, что я мог написать до сих пор.Dataset.withColumn () не работает в цикле, за исключением 1-й итерации
String[] columnNames = new String[dataset.columns().length];
String unescapedColumn;
Row firstRow= (Row)dataset.first();
String[] rowData = firstRow.mkString(",").split(",");
for(int i=0;i<rowData.length;i++) {
unescapedColumn=rowData[i].split("=")[0];
if(unescapedColumn.contains(">")) {
columnNames[i] = unescapedColumn.substring(unescapedColumn.indexOf(">")+1).trim();
}else {
columnNames[i] = unescapedColumn.trim();
}
}
Dataset<Row> namedDataset = dataset.toDF(columnNames);
for(String column : namedDataset.columns()) {
System.out.println("Column name :" + column);
namedDataset = namedDataset.withColumn(column, functions.substring_index(namedDataset.col(column),"=",-1));
}