簡體   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