使用Java Spark将键值对解析为Hive数据集行

时间:2019-02-20 19:17:42

标签: java apache-spark hadoop hive

我有一个包含以下数据的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个键值对,因此无法在Dataset上手动执行withcolumn()。任何帮助表示赞赏。

编辑1: 到目前为止,这是我能写的。除了第一个迭代

,Dataset.withColumn()似乎没有在循环中工作
    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));
    }

0 个答案:

没有答案