Alp*_*per 7 java nested apache-spark
RDD转换和操作只能由驱动程序调用,而不能在其他转换内部调用; 例如,rdd1.map(x => rdd2.values.count()*x)无效,因为无法在rdd1.map转换中执行值转换和计数操作.有关更多信息,请参阅SPARK-5063.
正如错误所说,我正在尝试在主映射函数中映射(转换)JavaRDD对象,Apache Spark怎么可能?
主JavaPairRDD对象(TextFile和Word是定义的类):
JavaPairRDD<TextFile, JavaRDD<Word>> filesWithWords = new...
Run Code Online (Sandbox Code Playgroud)
和地图功能:
filesWithWords.map(textFileJavaRDDTuple2 -> textFileJavaRDDTuple2._2().map(word -> new Word(word.getText(), (long) textFileJavaRDDTuple2._1().getText().split(word.getText()).length)));
Run Code Online (Sandbox Code Playgroud)
我也试过foreach而不是map功能,但没有工作.(当然搜索SPARK-5063)
同样,不支持对RDD的嵌套操作,Spark中不能使用嵌套的RDD类型.RDD仅在驱动程序中定义,结合它们,SparkContext
它们可以对它们所代表的数据进行操作.
因此,在这种情况下我们需要解决的根本原因是数据类型:
JavaPairRDD<TextFile, JavaRDD<Word>> filesWithWords
Run Code Online (Sandbox Code Playgroud)
哪个在Spark中没有可能的有效用途.根据用例(在问题中没有进一步解释),此类型应成为以下类型之一:
RDD的集合,包含它们引用的文本文件:
Map<TextFile,RDD<Word>>
Run Code Online (Sandbox Code Playgroud)
或者通过文本文件收集(textFile,Word):
JavaPairRDD<TextFile, Word>
Run Code Online (Sandbox Code Playgroud)
或者带有相应TextFile的单词集合:
JavaPairRDD<TextFile, List<Word>>
Run Code Online (Sandbox Code Playgroud)
一旦类型得到纠正,嵌套RDD操作的问题将自然得到解决.