У меня есть проект 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. Поскольку этот класс является частью самого Spark, имеет смысл получить доступ к классам и методам, которые являются частными для пакета «искры». Я хотел бы знать, можно ли добавлять новые классы в существующий пакет из другого проекта Maven. – PBJ