Spark 中的任务不可序列化

2024-01-14

我有这样的转变:

JavaRDD<Tuple2<String, Long>> mappedRdd = myRDD.values().map(
    new Function<Pageview, Tuple2<String, Long>>() {
      @Override
      public Tuple2<String, Long> call(Pageview pageview) throws Exception {
        String key = pageview.getUrl().toString();
        Long value = getDay(pageview.getTimestamp());
        return new Tuple2<>(key, value);
      }
    });

综合浏览量是一种:页面视图.java https://github.com/apache/gora/blob/master/gora-tutorial/src/main/java/org/apache/gora/tutorial/log/generated/Pageview.java

我将该类注册到 Spark 中,如下所示:

Class[] c = new Class[1];
c[0] = Pageview.class;
sparkConf.registerKryoClasses(c);

线程“main”org.apache.spark.SparkException 中出现异常:任务不 可序列化于 org.apache.spark.util.ClosureCleaner$.ensureSerialized(ClosureCleaner.scala:166) 在 org.apache.spark.util.ClosureCleaner$.clean(ClosureCleaner.scala:158) 在 org.apache.spark.SparkContext.clean(SparkContext.scala:1623) 处 org.apache.spark.rdd.RDD.map(RDD.scala:286) 在 org.apache.spark.api.java.JavaRDDLike$class.map(JavaRDDLike.scala:89) 在 org.apache.spark.api.java.AbstractJavaRDDLike.map(JavaRDDLike.scala:46) 在 org.apache.gora.tutorial.log.ExampleSpark.run(ExampleSpark.java:100) 在 org.apache.gora.tutorial.log.ExampleSpark.main(ExampleSpark.java:53) 引起原因:java.io.NotSerializedException: org.apache.gora.tutorial.log.ExampleSpark 序列化堆栈: - 对象不可序列化(类:org.apache.gora.tutorial.log.ExampleSpark,值: org.apache.gora.tutorial.log.ExampleSpark@1a2b4497) - 字段(类:org.apache.gora.tutorial.log.ExampleSpark$1,名称:this$0,类型:类 org.apache.gora.tutorial.log.ExampleSpark) - 对象(类 org.apache.gora.tutorial.log.ExampleSpark$1、org.apache.gora.tutorial.log.ExampleSpark$1@4ab2775d) - 字段(类:org.apache.spark.api.java.JavaPairRDD$$anonfun$toScalaFunction$1, 名称:fun$1,类型:接口 org.apache.spark.api.java.function.Function) - 对象(类 org.apache.spark.api.java.JavaPairRDD$$anonfun$toScalaFunction$1, ) 在 org.apache.spark.serializer.SerializationDebugger$.improveException(SerializationDebugger.scala:38) 在 org.apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala:47) 在 org.apache.spark.serializer.JavaSerializerInstance.serialize(JavaSerializer.scala:80) 在 org.apache.spark.util.ClosureCleaner$.ensureSerialized(ClosureCleaner.scala:164) ... 7 更多

当我调试代码时我看到JavaSerializer.scala即使有一个名为的类也会被调用KryoSerializer.

PS 1:我不想使用 Java Serializer 但实现Serializer at Pageview并不能解决问题。

PS 2:这并没有消除问题:

...
//String key = pageview.getUrl().toString();
//Long value = getDay(pageview.getTimestamp());
String key = "Dummy";
Long value = 1L;
return new Tuple2<>(key, value);
...

我在使用 Java 代码时多次遇到过这个问题。虽然我使用的是 Java 序列化,但我会将包含该代码的类设置为可序列化,或者如果您不想这样做,我会将函数设置为该类的静态成员。

这是解决方案的代码片段。

public class Test {
   private static Function s = new Function<Pageview, Tuple2<String, Long>>() {

     @Override
     public Tuple2<String, Long> call(Pageview pageview) throws Exception {
       String key = pageview.getUrl().toString();
       Long value = getDay(pageview.getTimestamp());
       return new Tuple2<>(key, value);
      }
  };
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 中的任务不可序列化 的相关文章

  • Rails 序列化数据验证

    我有一个通过默认 AR 行为序列化为 YAML 的字段 例如 它目前位于哈希数组中 name gt hi url gt bye name gt hi url gt bye name gt hi url gt bye 有没有办法可以在其中一些
  • Eclipse - 即使java文件有编译错误也会自动生成类文件

    我创建了一个简单的 java 文件 有编译错误 已删除 在第 4 行 public class Test public static void main String args System out println Hi 保存后 如果我看到
  • 对于空列表,max() 应该返回什么?

    Got java util NoSuchElementException head of empty list所以我试着检查一下 但现在我明白了 info max of a few numbers FAILED info 0 did not
  • 测试前设置TestNG的输出目录

    我正在使用 Eclipse 运行一些 TestNG 测试 使用 XML 文件 右键单击 作为 TestNG 套件运行 我仅将 Maven 用于依赖项 而不用于运行测试 有没有办法在代码中设置输出目录 例如 System out printl
  • 关于访问说明符

    我定义了一个类基 class Base private int i Base int i this i i 所以基类的对象可以访问私有变量 class BaseDemo public static void main String args
  • 纯java adb客户端[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 ADB http developer android com tools help adb html分
  • 如何解决找不到 com.google.cloud.Service 的类文件

    我正在尝试将 JSON 数据上传到 gcs 由于我之前没有使用谷歌云 所以我开始将随机字符串上传到 gcs 但在创建存储服务对象时我陷入了困境 Maven 依赖
  • Java 中 float 和 double 基元的比较

    我发现了Java的一个奇怪的角落 我觉得很奇怪 double dd 3 5 float ff 3 5f System out println dd ff 输出 正确 double dd 3 2 float ff 3 2f System ou
  • 亚马逊 AWS Java API。我看不到我的 AMI

    我正在使用 Amazon AWS 的 Java API 我成功进行了身份验证 然后获取了所有图像 但我的图像不在其中 我的 AMI 是私有的 但我想自从我经过身份验证后我仍然会看到它们 这是我的来源 final AmazonEC2 clie
  • 在Java中执行.lnk文件

    我需要在java中执行 lnk文件 指向exe文件的lnk文件 我能怎么做 在 VB net 中我做 Process Start path 它有效 谢谢你的帮助 Use a 流程构建器 http download oracle com ja
  • 如何在java中模拟SHIFT+鼠标按键

    我想将鼠标指针移动到特定位置并执行 SHIFT 鼠标右键单击 我可以将鼠标移动到某个位置 但无法模拟鼠标单击 Robot r new Robot r mouseMove x1 y1 我应该做什么来模拟预期的鼠标点击 我认为您只需要一点额外的
  • OkHttp如何获取Json字符串?

    Solution 这是我这边的一个错误 正确的方法是响应 body string 以外响应 body toString 我使用 Jetty servlet URL 是http 172 16 10 126 8789 test path jso
  • 将自定义方法映射器映射到 Mapstruct

    我正在创建一个 poc 以便在我未来的项目中使用 Mapstruct 现在我有一个问题如何将自定义方法映射到特殊目标 例如我有以下接口映射器 Mapper public interface ItemMapper static ItemMap
  • 与嵌套泛型集合的混淆

    请帮助我理解为什么add1 and add4 报告错误以及原因add2 and add3 不 具体来说 请举例说明如果编译器允许其中每一个进行编译 则会产生不良后果的示例 class InnerTypeConfusion interface
  • Java 中的 C#“is”运算符替代方案 [重复]

    这个问题在这里已经有答案了 在 C 中 当我想知道一个对象是否是特定类型的实例时 我可以使用 is 运算符 String foo hi if foo is String 我怎样才能在java中做到这一点 我知道我可以使用 try 语句 还有
  • Maven“部署”导致签名操作后代码重新打包(BAD 签名)

    我想将一个工件部署到 Sonatype OSS 存储库 当我使用以下命令进行部署时 签名无效 mvn clean source jar javadoc jar install gpg sign deploy gt gpg verify ta
  • 用于只读 DB 的 java ORM

    我了解 hibernate 但我想知道是否有一个更轻的 ORM 引擎只读数据库 我的意思是 我不需要一些事务查询或更新一些记录 另一方面 我需要处理一些大的记录列表 List
  • Java 1.4 有泛型吗?

    查看 Java 1 4 中的一些旧代码 但我对 Java 不熟悉 Java 1 4 有泛型吗 我一直在查看代码 没有发现泛型的任何用途 但这并不一定意味着它们不受支持 不 那是 1 5 的介绍 即 Java 2 发行版 1 5 really
  • 逆变方法参数类型

    wiki 逆变方法参数类型 https en wikipedia org wiki Covariance and contravariance 28computer science 29 Contravariant method argum
  • java中的^运算符[重复]

    这个问题在这里已经有答案了 谁能用一些例子解释一下java中 运算符的使用 这与大多数语言中的 相同 只是异或 false false false true false true false true true true true fals

随机推荐