如何在Java方法中使用Scala代码段?(Spark示例)

如何在Java方法中使用Scala代码段?(Spark示例),java,scala,Java,Scala,我想从Java调用Scala代码。但是,我只能操作代码的特定部分(下面示例中apply方法中的代码)。此外,我还可以将JAR添加到类路径中 例子 纯Java代码: //系统导入 导入org.apache.spark.SparkContext; 导入org.apache.spark.api.java.JavaSparkContext; 导入org.apache.spark.api.java.*; 导入org.apache.spark.api.java.function.*; 导入org.apach

我想从Java调用Scala代码。但是,我只能操作代码的特定部分(下面示例中apply方法中的代码)。此外,我还可以将JAR添加到类路径中

例子 纯Java代码:
//系统导入
导入org.apache.spark.SparkContext;
导入org.apache.spark.api.java.JavaSparkContext;
导入org.apache.spark.api.java.*;
导入org.apache.spark.api.java.function.*;
导入org.apache.spark.sql.types.*;
导入org.apache.spark.sql.*;
导入com.knime.bigdata.spark.core.exception.*;
导入com.knime.bigdata.spark1_6.api.RowBuilder;
导入com.knime.bigdata.spark1_6.jobs.scripting.java.AbstractSparkJavaSnippet;
导入com.knime.bigdata.spark1_6.jobs.scripting.java.AbstractSparkJavaSnippetSource;
导入com.knime.bigdata.spark1_6.jobs.scripting.java.AbstractSparkJavaSnippetSink;
//您的自定义导入:
//系统变量
公共类SparkJavaSnippet扩展了AbstractSparkJavaSnippet{
私有静态最终长serialVersionUID=1L;
//您的自定义变量:
//表达式开始
公共JavaRDD apply(最终JavaSparkContext sc、最终JavaRDD rowRDD1、最终JavaRDD rowRDD2)引发异常{
//*************************************************
//指定要采样的数据分数,如果
//取样时应进行更换
//*************************************************
最终双分数=0.5;
替换为false的最终布尔值;
//替换为true的最终布尔值;
//返回传入RDD的样本
返回第1行。样本(带替换,分数);
//表达式结束
}
}
部分Scala代码(不工作):
//系统导入
导入org.apache.spark.SparkContext;
导入org.apache.spark.api.java.JavaSparkContext;
导入org.apache.spark.api.java.*;
导入org.apache.spark.api.java.function.*;
导入org.apache.spark.sql.types.*;
导入org.apache.spark.sql.*;
导入com.knime.bigdata.spark.core.exception.*;
导入com.knime.bigdata.spark1_6.api.RowBuilder;
导入com.knime.bigdata.spark1_6.jobs.scripting.java.AbstractSparkJavaSnippet;
导入com.knime.bigdata.spark1_6.jobs.scripting.java.AbstractSparkJavaSnippetSource;
导入com.knime.bigdata.spark1_6.jobs.scripting.java.AbstractSparkJavaSnippetSink;
//您的自定义导入:
//系统变量
公共类SparkJavaSnippet扩展了AbstractSparkJavaSnippet{
私有静态最终长serialVersionUID=1L;
//您的自定义变量:
//表达式开始
公共JavaRDD apply(最终JavaSparkContext sc、最终JavaRDD rowRDD1、最终JavaRDD rowRDD2)引发异常{
//Scala代码从这里开始
瓦尔分数=0.5
val with replacement=false
第1行。样本(含替换,分数)
//Scala代码到此结束
//表达式结束
}
}
问题: 如何在
//Scala代码从这里开始
//Scala代码在这里结束
之间编写代码,以便在那里使用Scala代码-嵌入Java代码


我无法更改那些注释之外的代码!但是我可以将JAR添加到类路径中!

您不能将Scala“混入”Java中。。。是什么阻止了您使用等效的Java API?您不能只在那里编写scala代码,只能转发到scala对象。查看此网站:@cricket_007:Java糟糕透了;-)。Java是冗长的,是的,但是如果您有选择,那么只需使用Scala API。。。或者使用Java8和lambdas来承受一些痛苦away@cricket_007:我没有选择使用Scala API,但Java 8似乎是可用的-不确定Spark API是否允许Java 8 lambdas。无论如何,谢谢你的提示。
// system imports
import org.apache.spark.SparkContext;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.*;
import org.apache.spark.api.java.function.*;
import org.apache.spark.sql.types.*;
import org.apache.spark.sql.*;
import com.knime.bigdata.spark.core.exception.*;
import com.knime.bigdata.spark1_6.api.RowBuilder;
import com.knime.bigdata.spark1_6.jobs.scripting.java.AbstractSparkJavaSnippet;
import com.knime.bigdata.spark1_6.jobs.scripting.java.AbstractSparkJavaSnippetSource;
import com.knime.bigdata.spark1_6.jobs.scripting.java.AbstractSparkJavaSnippetSink;

// Your custom imports:

// system variables
public class SparkJavaSnippet extends AbstractSparkJavaSnippet {
    private static final long serialVersionUID = 1L;


// Your custom variables:

// expression start
    public JavaRDD<Row> apply(final JavaSparkContext sc, final JavaRDD<Row> rowRDD1, final JavaRDD<Row> rowRDD2) throws Exception {

    //*************************************************
    //Specify the fraction of data to sample and if
    //the sampling should be performed with replacement
    //*************************************************
    final double fraction = 0.5;
    final boolean withReplacement = false;  
    //final boolean withReplacement = true;


    //Returns a sample of the incoming RDD
    return rowRDD1.sample(withReplacement, fraction);

// expression end
    }
}
// system imports
import org.apache.spark.SparkContext;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.*;
import org.apache.spark.api.java.function.*;
import org.apache.spark.sql.types.*;
import org.apache.spark.sql.*;
import com.knime.bigdata.spark.core.exception.*;
import com.knime.bigdata.spark1_6.api.RowBuilder;
import com.knime.bigdata.spark1_6.jobs.scripting.java.AbstractSparkJavaSnippet;
import com.knime.bigdata.spark1_6.jobs.scripting.java.AbstractSparkJavaSnippetSource;
import com.knime.bigdata.spark1_6.jobs.scripting.java.AbstractSparkJavaSnippetSink;

// Your custom imports:

// system variables
public class SparkJavaSnippet extends AbstractSparkJavaSnippet {
    private static final long serialVersionUID = 1L;

// Your custom variables:

// expression start
    public JavaRDD<Row> apply(final JavaSparkContext sc, final JavaRDD<Row> rowRDD1, final JavaRDD<Row> rowRDD2) throws Exception {

    //Scala code begins here
    val fraction = 0.5
    val withReplacement = false
    rowRDD1.sample(withReplacement, fraction)
    //Scala code ends here

// expression end
    }
}