我有一個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