我有一个Scala/Spark项目(使用Maven构建),我想在其中执行以下操作。从另一个模块访问Scala私有类
我想修改org.apache.spark.mllib.recommendations.ALS
,所以我已将该文件的源代码复制到我自己的包中:org.apache.spark.mllib.myrecommendations.ALS
。但是,它依赖于org.apache.spark.util.Utils
等一些类,它们被声明为private[spark]
。
我曾希望通过将我的代码放在org.apache.spark
之内,它可以访问私有成员。但它是抱怨,也许是因为Spark是通过Maven模块导入的?我该如何解决这个问题?
这里是进口的pom.xml如何火花mllib:
<dependency>
<groupId>com.sparkjava</groupId>
<artifactId>spark-core</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.10</artifactId>
<version>1.1.0</version>
<scope>provided</scope>
</dependency>
这里是我碰到一个错误信息的例子:
error: variable checkpointDir in class SparkContext cannot be accessed in org.apache.spark.SparkContext
[WARNING] if (sc.checkpointDir.isDefined && (iter % 3 == 0)) {
[WARNING] ^
展望org.apache源.spark.SparkContext,我看到checkpointDir被声明为私有org.apache.spark:
private[spark] var checkpointDir: Option[String] = None
为什么即使我的代码位于org.apache.spark.mllib.myrecommendation.ALS,org.apache.spark的子代中,我也无法访问此成员?
你不应该使用任何类的私有成员!请检查您想要调用/创建的任何方法/类是否具有公共接口。使用私有成员是根本错误。 – bkowalikpl
私人会员是有原因的私人会员。试图击败这是@bkowalikpl说的根本错误。如果您认为这些成员被错误地设为私有,那么请与Spark软件作者一起处理这个问题。 –
你似乎没有理解我的问题。我明白应用程序/客户端代码不应该访问私有成员。但是,我试图修改Spark的* part *类中的一个类的实现。由于该类是Spark本身的一部分,因此它可以访问“spark”包私有的类和方法。我想知道是否可以从一个不同的Maven项目中将新类添加到现有的包中。 – PBJ