[英]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 。 StructType的apply 方法不包含处理反引号的逻辑,如果列名不完全匹配,则会抛出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.