小编cip*_*i.l的帖子

如何使用新语法树部分更新编译?

我有以下编译:

Solution solutionToAnalyze = workspace.OpenSolutionAsync(pathToSolution).Result;
var projects = solutionToAnalyze.Projects;
Compilation compilation = projects.First().GetCompilationAsync().Result; 
var syntaxTrees = compilation.SyntaxTrees.First();
var semanticModel = compilation.GetSemanticModel(syntaxTree, true);
SyntaxNode newSource = semanticModel.SyntaxTree.GetRoot();
var methodRefactoringVisitor = new MethodRefactoringVisitor();
Run Code Online (Sandbox Code Playgroud)

我修改了一个方法的主体

public override SyntaxNode VisitMethodDeclaration(MethodDeclarationSyntax method)
{
    var newBody = method.Body;
    //modify newBody
    var updatedMethod = method.ReplaceNode(method.Body, newBody);
    return updatedMethod;
}

newSource = methodRefactoringVisitor.Visit(newSource);
Run Code Online (Sandbox Code Playgroud)

在对方法进行更改后,我想更新编译,以便例如我可以查询节点的类型:

var typeInfo = semanticModel.GetTypeInfo(node).Type;
Run Code Online (Sandbox Code Playgroud)

目前我正在做的事情:

var oldSyntaxTree = semanticModel.SyntaxTree;
var newSyntaxTree = newSource.SyntaxTree;
var newCompilation = compilation.ReplaceSyntaxTree(oldSyntaxTree, newSyntaxTree);
var newSemanticModel = newCompilation.GetSemanticModel(newSyntaxTree);
Run Code Online (Sandbox Code Playgroud)

我想在修改主体后立即更新编译,这样如果我从修改后的方法的父类调用访问者,我就可以看到更改.

是否可以在不编译整个项目/类的情况下部分更新编译? …

c# roslyn

26
推荐指数
1
解决办法
1034
查看次数

怎么把org.apache.spark.mllib.linalg.SparseVector转换成org.apache.spark.ml.linalg.SparseVector?

怎么转换 org.apache.spark.mllib.linalg.SparseVectororg.apache.spark.ml.linalg.SparseVector

我将代码从转换mllibmlapi。

import org.apache.spark.mllib.linalg.{DenseVector, Vector}
import org.apache.spark.ml.linalg.{DenseVector => NewDenseVector, Vector => NewVector}
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.ml.feature.{LabeledPoint => NewLabeledPoint}

val labelPointData = limitedTable.rdd.map { row =>
  new NewLabeledPoint(convertToDouble(row.head), row(1).asInstanceOf[org.apache.spark.ml.linalg.SparseVector])
}
Run Code Online (Sandbox Code Playgroud)

语句row(1).asInstanceOf[org.apache.spark.ml.linalg.SparseVector] 由于以下异常而无法运行:

org.apache.spark.mllib.linalg.SparseVector cannot be cast to org.apache.spark.ml.linalg.SparseVector

如何克服呢?

我发现代码转换mllibml,但不是反之亦然。

scala apache-spark rdd apache-spark-ml apache-spark-mllib

2
推荐指数
1
解决办法
1547
查看次数