sparkjava:向量汇编程序列名中的转义点

js5cn81o  于 2021-05-24  发布在  Spark
关注(0)|答案(1)|浏览(376)

我有一个数据集,其中一些列名有点。当涉及到向量汇编程序时,问题就出现了。他们似乎相处不好,所以我试着从很多方面摆脱这些点,但都没有改变。

String[] expincols = newfilenameavgpeaks.columns();

VectorAssembler assemblerexp = new VectorAssembler()
                    .setInputCols(expincols)
                    .setOutputCol("intensity");

Dataset<Row> filenameoutput = assemblerexp.transform(newfilenameavgpeaks);

我用“”、“”、“”、“”、“”、“”、“`”、“'”、“'”等 Package 了expincols中的每个元素,但什么都没有!我也在newfilenameavgpeaks的列名中尝试了这些方法,但仍然一无所获。你知道怎么逃跑吗?

d7v8vwbk

d7v8vwbk1#

如果数据集包含列 a.b 你还可以用 df.col(a.b) 选择带有 . 以它的名义。这是因为dataset.col尝试解析列名并可以处理倒勾。
但是,vectorassembler.transform接受提供的数据集的架构,并使用此structtype处理vectorassembler.transformschema中的列名。structtype的apply方法不包含处理backticks和抛出 IllegalArgumentException 如果列名不完全匹配。
因此,唯一的选择是在将列提供给vectorassembler之前重命名这些列:

Dataset<Row> newfilenameavgpeaks = ...

for( String col : newfilenameavgpeaks.columns()) {
    newfilenameavgpeaks = newfilenameavgpeaks
            .withColumnRenamed(col, col.replace('.', '_'));
}

VectorAssembler assemblerexp = new VectorAssembler()
    .setInputCols(newfilenameavgpeaks.columns()).setOutputCol("intensity");

Dataset<Row> filenameoutput = assemblerexp.transform(newfilenameavgpeaks);

相关问题