当前位置: 首页 > 知识库问答 >
问题:

如何解决嵌套映射函数中的SPARK-5063

高宸
2023-03-14

RDD转换和操作只能由驱动程序调用,不能在其他转换内部调用;例如,rdd1。地图(x)=

正如错误所说,我试图在主映射函数中映射(转换)一个JavaRDD对象,ApacheSpark怎么可能呢?

主要JavaPairRDD对象(TextFile和Word是定义的类):

JavaPairRDD<TextFile, JavaRDD<Word>> filesWithWords = new...

和地图功能:

filesWithWords.map(textFileJavaRDDTuple2 -> textFileJavaRDDTuple2._2().map(word -> new Word(word.getText(), (long) textFileJavaRDDTuple2._1().getText().split(word.getText()).length)));

我还尝试了foreach映射函数,但不起作用。(当然还有SPARK-5063)

共有3个答案

乜嘉悦
2023-03-14

@maasg首先我使用了JavaPairdd

文本文件(字符串路径,字符串文本)

字(字符串字、整数计数)

现在使用JavaRDD

文本文件(字符串路径,字符串文本,列表

字(字符串字、整数计数)

最后

List<Word> countDrafts = wordCount.map(v11 -> new Word(v11._1(), (long) 0)).collect();
JavaRDD<TextFile> ft = fileTexts.map(v11 -> new TextFile(v11._1(), v11._2(), countDrafts));
ft.foreach(textFile -> textFile.getWordList().forEach(word -> new  Word(word.getText(), getWordCountFromText(textFile.getText(), word.getText())))); 

getWordCountFromText()函数在TextFile对象的文本中计数单词,但不幸的是,没有使用火花减少方法,使用经典的方式。

顺便说一下,我将在接下来的日子里尝试数据帧,但我有很短的时间来做这件事。

谢谢大家。

姜乐语
2023-03-14

当我在Spark的学习曲线中达到这个完全相同的点时(尝试使用嵌套RDD但失败了),我切换到了DataFrames,并且能够使用连接来完成同样的事情。而且,一般来说,数据帧的速度几乎是RDD的两倍——至少就我所做的工作而言。

邢飞白
2023-03-14

同样,不支持RDD上的嵌套操作,Spark中也不支持嵌套RDD类型。RDD仅在驱动程序中定义,在驱动程序中,RDD与它们的SparkContext相结合,可以对它们所表示的数据安排操作。

因此,在这种情况下,我们需要解决的根本原因是数据类型:

JavaPairRDD<TextFile, JavaRDD<Word>> filesWithWords

在火花中没有可能的有效用途。根据使用情况,这在问题中没有进一步解释,这种类型应该成为以下类型之一:

RDD的集合,其中包含它们所指的文本文件:

Map<TextFile,RDD<Word>>

或按文本文件列出的(文本文件、Word)集合:

JavaPairRDD<TextFile, Word>

或一组单词及其对应的文本文件:

JavaPairRDD<TextFile, List<Word>>

一旦纠正了类型,嵌套RDD操作的问题就会自然得到解决。

 类似资料:
  • 我用的是Protobuf 3。从文档来看,似乎无法定义嵌套贴图: 我正在尝试创建一种消息类型来表示期权链的定价信息(出价和要价)。对于那些不熟悉这些金融工具的人,基本上我有一套“到期日期(YYYYMMDD)”。在每个过期日期中,我都有一组“strikes(float number;如果需要,可以用字符串表示,我同意)”。在每次行使中,我有两个期权,一个“看跌”和一个“看涨”(这被称为期权的“右”)

  • 我尝试使用MapStruct编写映射器类,如下所示: 目前它显示了“未知属性”“customer.customerid”和“usertypes.usertype.userid”等错误。有人能帮我用MapStruct映射所有这些元素吗? 问题2:我们如何绘制跟踪图?1)customerId usertypes->user->userid 2)pdtPrice offers->OffersType->

  • 我用下面的方法尝试了嵌套映射。 我在声明“root_cause”时出错:[{“type”:“mapper_parsing_exception”,“reason”:“root映射定义有不支持的参数:[type:nested]。” 感谢您的帮助。

  • 我有一个mongodb文档,我正在使用axios ajax调用来提取它。文档有一个对象数组,其中还包含一个嵌套的对象数组。每个对象都分配了一个mongo id。最顶端的数据显示在相应的最顶端的表示组件中,但对象的后续阵列不会显示在其相对表示组件中。我得到的错误是。“TypeError:this.props.card.rdfts未定义”,但会显示它的非数组同级。然而,当我查看react-dev工具和

  • 我对流图法有点困惑。有一些简单的源代码可以运行: map()签名:Stream map(函数 在我的选择中,我认为赋予文字的功能。stream()。map应该有1个参数,但是string::length没有任何输入参数,只返回int。 它看起来像word流调用字符串中的每个元素“word”。长度(),但我不知道该怎么做?为什么string::length签名不需要与函数签名(R apply(T))

  • 我有一个方法可以返回相当嵌套的JSON,比如: 当我尝试使用< code>JsonSlurper将这个JSON slurp到< code>def result中时,我得到了异常: 当<code>parseText</code>执行时产生引发的异常: 有什么办法吗?