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

在映射()中使用筛选器()时引发异常

江煜
2023-03-14

我试图在map()中使用filter(),但我得到了这个火花异常:

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

我知道火花不允许嵌套转换/动作/RDD,所以有人可以给我一个建议,如何替代它(没有嵌套转换或动作),我有一个RDD它的元组是这样的:

 JavaRDD< String[]> RDD

我试着映射它,给它一个列表作为参数,这个列表包含javaPairRDD这样的:

List<JavaPairRDD<String,String>> list
JavaRDD< String[]> result = RDD.map(new modifyRDD(list));

这些行指的是修改RDD()函数:

public static class modifyRDD implements Function <String[], String[]> { 

    List<JavaPairRDD<String,String>> list;
    public modifyRDD (List<JavaPairRDD<String,String>> list ){ this.list=list;}

    public String [] call(String[] t) {

          String[] s = t;

          for (int i = 0; i < NB_TD; i++) {         
            int j=i; 
         // select the appropriate RDD from the RDDs_list to the current index 

            JavaPairRDD<String,String> rdd_i = list.get(i);
            String previousElement=s[j];

           JavaPairRDD<String,String> currentRDD =  rdd_i.filter(line -> line._1().equals(previousElement));

           String newElement=currentRDD.first()._2();   

           s[j]=newElement;
                }

          return   (s) ;

    }


    }

所以,问题就在这方面

  JavaPairRDD<String,String> currentRDD =  rdd_i.filter(line -> line._1().equals(previousElement));

现在我给出一个例子,假设列表包含2对RRDD

list={PairRDD1={(a,b)(c,d)},PairRDD2={(u,v)(x,y)}..}

我想映射的RDD包含:

 JavaRDD< String[]> RDD = {[a,u],[c,x],[a,x].....}

我想要的结果是map()后:

 JavaRDD< String[]> result = {[b,v],[d,y],[b,y].....}

共有1个答案

谷弘致
2023-03-14

我改变了列表的类型

这是修改后的map()函数

  public static class modifyRDD implements Function <String[], String[]> { 

    List<List<Tuple2<String,String>>> list;
    public modifyRDD (List<List<Tuple2<String,String>>> list ){ this.list=list;}

    public String [] call(String[] t) {

          String[] s = t;

          for (int i = 0; i < NB_TD; i++) {         

         // select the appropriate lookup_list 

            List<Tuple2<String,String>> list_i = list.get(i);
            String previousElement=s[i];
            String newElement="";

            for (int k = 0; k < list_i.size(); k++){

            Tuple2<String,String> sk1 = list_i.get(k);
            if (sk1._1.equals( previousElement)){  newElement=sk1._2;}

            }


           s[i]= newElement;
                }
         return(s);
                                   }
 类似资料:
  • 如何过滤

  • 但这无济于事,仍然令人崩溃。 我在考虑make try{}catch返回500,并在每个过滤器中进行某种日志记录,但这将导致大量的重复。 有什么办法可以在全球范围内处理吗? MVC服务的添加方式如下:

  • 我创建了一个自定义异常类 并且在抛出异常时将此异常类发送到客户端。我还使用进行进程。 如何捕获安全过滤器抛出异常并创建用户定义的异常并将其发送到客户端? 我的过滤方法,

  • 问题内容: 嗨,我正在使用Elastic Search elasticsearch-0.90.2版本。我正在尝试使用jsonBuilder使用自定义分析器来映射分析器,同时创建索引时,它会抛出未找到分析器的异常。 设置 :- 映射:- 像这样创建索引: 例外情况: 任何人都可以告诉这种方法中的错误吗? 问题答案: 我找到了解决方案。在“设置”中,如果您使用“索引”而不是“设置”,那么它将正常工作。

  • 我目前有一个RESTfulWebService跑步服。我最近添加了一个过滤器,它可以执行一些auth操作,并且可以在happy path的情况下工作。但是,当我需要从这个过滤器中抛出一个错误时,它不会将异常序列化为一个漂亮的json字符串,而是抛出一个500,错误如下: 问题是,我不想在应用程序/八位字节流中写入任何内容。我的服务只使用。这在我的实际类中不是问题,我可以在这些类中指定注释。从资源主

  • 问题内容: 我正在尝试使用数组映射进一步过滤对象,以准备将其发送到服务器进行保存。我可以过滤为1个键值,这很不错,但是我想更进一步,将其与布尔值内部进行比较。 所以,现在这就是我所拥有的- 这对于拉出id很有用,但是如果它们的选定值== false,我不想将它们压入这个新数组中,因此我将一个条件作为进一步过滤条件。这有点奏效,我得到了一个id数组,但是具有.selected == false的id