Apache spark 在Spark-Java中读取reduceByKey()方法中的文件

Apache spark 在Spark-Java中读取reduceByKey()方法中的文件,apache-spark,apache-spark-sql,spark-streaming,Apache Spark,Apache Spark Sql,Spark Streaming,我正在开发一个Spark应用程序,它通过向边添加相邻顶点来扩展边。我正在使用Map/reduce范例来处理我想要划分边的总数并在不同的工作节点中展开它们的过程 为此,我需要根据键值读取工作节点中的分区相邻列表。但是我在尝试加载reduceByKey()方法中的文件时出错。它表示该任务不可序列化。我的代码: public class MyClass implements Serializable{ public static void main(String args[]) throws

我正在开发一个Spark应用程序,它通过向边添加相邻顶点来扩展边。我正在使用Map/reduce范例来处理我想要划分边的总数并在不同的工作节点中展开它们的过程

为此,我需要根据值读取工作节点中的分区相邻列表。但是我在尝试加载reduceByKey()方法中的文件时出错。它表示该任务不可序列化。我的代码:

public class MyClass implements Serializable{
    public static void main(String args[]) throws IOException {     
       SparkConf conf = new SparkConf().setAppName("startingSpark").setMaster("local[*]");
       JavaSparkContext sc = new JavaSparkContext(conf);               
       JavaRDD<String> file = sc.textFile("hdfs://localhost:9000/mainFile.txt");
       ... ... ... //Mapping done successfully
       JavaPairRDD<String, String> rdd1 = pairs.reduceByKey(new Function2<String, String, String>() {
       @Override
       public String call(String v1, String v2) throws Exception {
          ... ... ...
          JavaRDD <String> adj = sc.textFile("hdfs://localhost:9000/adjacencyList_"+key+"txt");
          //Here I to expand the edges after reading the adjacency list.
        }
    }
公共类MyClass实现可序列化{
公共静态void main(字符串args[])引发IOException{
SparkConf conf=new SparkConf().setAppName(“startingSpark”).setMaster(“local[*]);
JavaSparkContext sc=新的JavaSparkContext(conf);
JavaRDD file=sc.textFile(“hdfs://localhost:9000/mainFile.txt");
……//映射已成功完成
javapairdd rdd1=pairs.reduceByKey(新函数2(){
@凌驾
公共字符串调用(字符串v1、字符串v2)引发异常{
... ... ...
javarddj=sc.textFile(“hdfs://localhost:9000/adjacencyList_“+键+txt”);
//在这里,我将在阅读邻接列表后展开边。
}
}
但是我得到一个错误任务不可序列化。原因是:java.io.notserializableeexception:org.apache.spark.api.java.JavaSparkContext 序列化堆栈: -对象不可序列化。我认为这是因为我在worker节点中使用的spark上下文与驱动程序中使用的spark上下文相同。如果我尝试在reduceByKey()中创建新的spark上下文方法,它也给了我一个错误,告诉我这个JVM中应该只运行一个SparkContext

有人能告诉我如何读取reduceByKey()方法中的文件吗?还有其他方法可以完成我的任务吗?我希望扩展工作节点中的边,以便它们可以以分布式方式运行


提前感谢。

如果此
javarddj=sc.textFile(“hdfs://localhost:9000/adjacencyList.txt")
文件大小较小,然后在reducebykey as列表外部读取并广播相同的内容。广播的变量可以在reduceByKeyadjacencyList.txt内部使用。它是一个大文件。它被分区并保存在hdfs位置内。分区应基于键值加载到工作节点内。如果此
JavaRDD adj=sc.textFile(“hdfs://localhost:9000/adjacencyList.txt")
文件大小较小,然后在reducebykey as列表外部读取并广播相同的内容。广播的变量可以在reduceByKeyadjacencyList.txt内部使用。它是一个大文件。它被分区并保存在hdfs位置内。分区应基于键值加载到工作节点内。