Разбор пар ключ-значение в строки набора данных Hive с использованием java spark - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть файл hdfs со следующими данными

key1=value1  key2=value2  key3=value3...
key1=value11  key2=value12   key3=value13.. 

Мы используем и внутреннюю структуру, которая дает набор данных в качестве входных данных для метода Java, который должен быть преобразован, как показано ниже, и помещен в таблицу кустов

  1. ключи должны быть именами столбцов куста
  2. Строка, сформированная после разделения набора данных с = в качестве разделителя и выбора значения справа

Ожидаемый результат:

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));
    }
...