微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Spark Java:矢量汇编程序的列名中的转义点

我有一个数据集,其中某些列名带有点。当涉及Vector Assembler时会出现问题。看来他们并没有相处,所以我试图以多种方式逃避点,但没有改变。

API key secret

我将每个元素都用expincols括起来:“`”,“'',”,“'',”,“'',“,”,“”,“等等”,但是什么也没有!我也尝试了这些在newfilenameavgpeaks的列名称中,但还是一无所有。有什么想法可以逃脱吗?

解决方法

如果数据集包含列a.b,您仍然可以使用df.col(`a.b`)选择名称为.的列。之所以有效,是因为Dataset.col尝试resolve列名并可以处理反引号。

但是,

VectorAssembler.transform采用提供的数据集的架构,并使用此StructType处理VectorAssembler.transformSchema中的列名。 apply method of StructType根本不包含处理反引号的逻辑,如果列名不完全匹配,则抛出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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。