Я использую искру 3.4.1 в проекте maven, где также настроен язык scala (2.13.8). Я пытаюсь создать класс Like.java в проекте, расширив StringRegexExpression искры
package com.practice;
import org.apache.spark.sql.catalyst.expressions.Expression;
import org.apache.spark.sql.catalyst.expressions.Lag;
import org.apache.spark.sql.catalyst.expressions.Like;
import org.apache.spark.sql.catalyst.expressions.StringRegexExpression;
import org.apache.spark.sql.catalyst.expressions.codegen.CodegenContext;
import org.apache.spark.sql.catalyst.expressions.codegen.ExprCode;
import scala.collection.immutable.IndexedSeq;
import scala.collection.immutable.Seq;
import java.util.regex.Pattern;
public class Like extends StringRegexExpression {
private Expression left;
private Expression right;
public CustomLikeExpression(Expression left, Expression right) {
}
@Override
public Seq inputTypes() {
return scala.jdk.javaapi.CollectionConverters.asScala(
java.util.Arrays.asList(
org.apache.spark.sql.types.StringType$.MODULE$,
org.apache.spark.sql.types.StringType$.MODULE$)).toSeq();
}
@Override
public ExprCode doGenCode(CodegenContext ctx, ExprCode ev) {
return null;
}
@Override
public String escape(String v) {
return null;
}
@Override
public boolean matches(Pattern regex, String str) {
return false;
}
@Override
public Expression left() {
return left;
}
@Override
public Expression right() {
return right;
}
@Override
public Expression withNewChildrenInternal(Expression newLeft, Expression newRight) {
return new Like(newLeft, newRight);
}
@Override
public boolean canEqual(Object that) {
return false;
}
@Override
public int productArity() {
return 0;
}
@Override
public Object productElement(int n) {
return null;
}
}
когда я пытаюсь скомпилировать его, я получаю следующую ошибку:
[ОШИБКА] maven_spark/src/main/ java/com/practice/CustomLikeExpression.java:[14,8] com.practice.CustomLikeExpression не является абстрактным и не переопределяет абстрактный метод с помощью NewChildrenInternal(scala.collection.immutable.IndexedSeq) в org.apache.spark.sql.catalyst.trees.TreeNode
Проблема в том, что я не могу переопределить этот конкретный метод с помощью NewChildrenInternal (scala.collection.immutable.IndexedSeq) в моем классе Java, поскольку этот метод в TreeNode определен с ключевым словом protected как
protected def withNewChildrenInternal(newChildren: IndexedSeq[BaseType]): BaseType
И эта реализация предоставляется в BinaryLike, не делая ее защищенной и финальной, как
override final def withNewChildrenInternal(newChildren: IndexedSeq[T]): T = {
assert(newChildren.size == 2, "Incorrect number of children")
withNewChildrenInternal(newChildren(0), newChildren(1))
}
поскольку этот метод стал окончательным в BinaryLike, я не могу его переопределить в своем Java-файле.
как решить эту проблему?мой pom.xml:
4.0.0
com.example
maven_spark
1.0-SNAPSHOT
2.13.8
3.4.1
1.8
1.8
4.9.2
scala-tools.org
Scala-Tools Maven2 Repository
https://repo1.maven.org/maven2/
org.scala-lang
scala-library
${scala.version}
org.apache.spark
spark-core_2.13
${spark.version}
org.apache.spark
spark-sql_2.13
${spark.version}
com.sparkjava
spark-core
2.9.4
net.alchim31.maven
scala-maven-plugin
4.9.2
compile
testCompile
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
${maven.compiler.source}
${maven.compiler.target}
org.scala-tools
maven-scala-plugin
2.15.2
compile
compile
compile
test-compile
testCompile
test-compile
process-resources
compile
Подробнее здесь: https://stackoverflow.com/questions/787 ... a-java-cla