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

引发异常的火花sortby

钮博裕
2023-03-14

我正在尝试按键对JavaPairRDD进行排序。

 JavaPairRDD<String, HashMap<String, Object>> countAndSum = grupBydate
                                        .reduceByKey(new Function2<HashMap<String, Object>, HashMap<String, Object>, HashMap<String, Object>>() {
                                            @Override
                                            public HashMap<String, Object> call(
                                                    HashMap<String, Object> v1,
                                                    HashMap<String, Object> v2)
                                                    throws Exception {
                                                long count = Long.parseLong(v1.get(
                                                        SparkToolConstant.COUNT)
                                                        .toString())
                                                        + Long.parseLong(v2
                                                                .get(SparkToolConstant.COUNT)
                                                                .toString());
                                                Double sum = Double.parseDouble(v1.get(
                                                        SparkToolConstant.VALUE)
                                                        .toString())
                                                        + Double.parseDouble(v2
                                                                .get(SparkToolConstant.VALUE)
                                                                .toString());
                                                HashMap<String, Object> sumMap = new HashMap<String, Object>();
                                                sumMap.put(SparkToolConstant.COUNT,
                                                        count);
                                                sumMap.put(SparkToolConstant.VALUE, sum);
                                                return sumMap;
                                            }
                                        });


System.out.println("count before sorting : "
                                        + countAndSum.count());



   /**
    sort by date 

    */
                                JavaPairRDD<String, HashMap<String, Object>> sortByDate = countAndSum
                                        .sortByKey(new Comparator<String>() {
                                            @Override
                                            public int compare(String dateStr1,
                                                    String dateStr2) {
                                                DateUtil dateUtil = new DateUtil();
                                                Date date1 = dateUtil.stringToDate(
                                                        dateStr1, dateFormat);
                                                Date date2 = dateUtil.stringToDate(
                                                        dateStr2, dateFormat);
                                                if (date2 == null && date1 == null) {
                                                    return 0;
                                                } else if (date2 != null
                                                        && date1 != null) {
                                                    return date1.compareTo(date2);
                                                } else if (date2 == null) {
                                                    return 1;
                                                } else {
                                                    return -1;
                                                }
                                            }
                                        });
                        System.out.println("count after sorting : "
                                + sortByDate.count());

块引号

共有1个答案

东和怡
2023-03-14

Spark将首先序列化您在reducebykeysorbykey中传递的函数,并将它们传递给执行器。因此,您应该保证您的函数在那里是可序列化的

代码中的sparktoolconstant&dateutil似乎是导致此错误的原因。

 类似资料:
  • 我目前正在使用上面的UDF将一列字符串解析成一个键和值的数组。“50:63.25,100:58.38”到[[50,63.2],[100,58.38]]。在某些情况下,字符串是“\N”,我无法解析列值。如果字符串是“\N”,那么我应该返回一个空数组。有人能帮我处理这个异常或帮我添加一个新的案例吗?我是spark-scala的新手。 错误:scala.MatchError:[Ljava.lang.St

  • 这个函数的作用是将字符串列解析为键和值的数组。""to。这是我的UDF,它创建了一个包装的int和Double结构元素数组。 有些情况下,输入字符串的格式不正确,我会得到一个错误:输入字符串的< code > Java . lang . numberformatexception :因为“< code>k.trim.toInt”无法转换像“< code>.01-4.1293”这样的脏数据,这是一个

  • 你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。 如何引发异常 例13.2 如何引发异常 #!/usr/bin/python # Filename: raising.py classShortInputException(Exception):     '''A u

  • 问题内容: 鉴于此Java 8代码 我们如何正确地将其委派给方法调用的堆栈?(简而言之,如何使此方法抛出此错误?) Java中的Lambda看起来对错误处理不是很友好… 问题答案: 我的方法是从lambda 偷偷地 将其抛出,但是要小心,使该方法在其子句中声明它。使用我在这里发布的课程: 这样,您可以有效地使编译器仅“移开视线”,从而在代码中的某个位置禁用其异常检查,但是通过在方法中声明异常,可以

  • 我使用正则表达式来查找一个字符串是否存在于一个书页中。下面是相同的代码。 观察: > 案例1:当searchText=“(222M)”时 结果:找到字符串。 案例2:当search chText="(222M"//缺少括号时 我得到以下例外。 索引22:.\b.{0}(1110r.{附近regexp模式中嵌套的括号不正确。{0}.\b 还有更好的在页面中查找字符串的选项。使用String.cont

  • 请注意,我比程序员更擅长数据挖掘。我试图运行作者Sandy Ryza的书《Spark的高级分析》中的示例(这些代码示例可以从https://github.com/sryza/aas下载),我遇到了以下问题。当我打开这个项目在Intelij的想法,并试图运行它,我得到错误"异常线程"主"java.lang.NoClassDefFoundError: org/apache/火花/rdd/RDD"有人知