繁体   English   中英

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

[英]Spark Java: Escape dot in column names for vector assembler

我有一个数据集,其中一些列名有点。 当涉及到 Vector Assembler 时,问题就出现了。 似乎他们不相处,所以我试图以多种方式逃避这些点,但没有任何改变。

String[] expincols = newfilenameavgpeaks.columns();

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

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

我用expincols包裹了每个元素:“`”,“`”,“```”,“````”,“'”,'”'等,但什么都没有!我也在专栏中尝试过这些newfilenameavgpeaks 的名称但仍然没有任何想法如何逃脱?

如果数据集包含列ab ,你仍然可以使用df.col(`ab`)与选择栏. 以其名义。 这是有效的,因为Dataset.col尝试解析列名称并可以处理反引号。

VectorAssembler.transform但是需要所提供的数据集的架构,并使用此StructType来处理的列名VectorAssembler.transformSchema StructTypeapply 方法不包含处理反引号的逻辑,如果列名不完全匹配,则会抛出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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM