我有一个这样的转变:
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);
}
});
Pageview是一种:Pageview。JAVA
我在Spark上注册了这样的课程:
Class[] c = new Class[1];
c[0] = Pageview.class;
sparkConf.registerKryoClasses(c);
异常线程"main"org.apache.spark.SparkExctive:任务不能在org.apache.spark.util.ClosureCleaner$. ensureSerializable(ClosureCleaner.scala:166)在org.apache.spark.util.ClosureCleaner$.清洁(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.JavaRDD类似于$class.map(JavaRDDLike.scala:89)在org.apache.spark.api.java.AbstractJavaRDDLike.map(JavaRDDLike.scala:46)在org.apache.gora.tutorial.log.ExpleSpark.run(ExpleSpark.java:100)在org. apache. gora. tuorial. log。由java. io. NotSerializableExctive: org. apache. gora.教程. log.造成的。示例Spark序列化堆栈:-对象不可序列化(类: org. apache. gora.教程. log。示例Spark,值:org.apache.gora.tutorial.log.ExampleSpark@1a2b4497)-字段(类: org. apache. gora.教程. log.)-字段(类: org. apache. gora.教程. log。示例Spark1美元,名称: this0美元,类型:类org. apache. gora.教程. log。示例Spark)-对象(类org. apache. gora.教程. log。示例Spark$1@4ab2775d)-字段(类: org. apache. spark. api. java. JavaPairRDD$$anonfun$toScala功能1美元,名称: fun1美元,类型:接口org. apache. spark. appark
当我调试代码时,我看到JavaSerializer。scala
被调用,即使有一个名为KryoSerializer
的类。
PS 1:我不想使用Java序列化器,但是在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);
}
};
}
问题内容: 我们在Spark上使用Redis来缓存键值对,这是代码: 但是编译器给了我这样的反馈: 有人可以告诉我如何序列化从Redis获得的数据。非常感谢。 问题答案: 在Spark中,s(如此处)上的函数被序列化并发送给执行程序进行处理。这意味着这些操作中包含的所有元素都应该可序列化。 Redis连接不可序列化,因为它打开了到目标DB的TCP连接,该TCP连接已绑定到创建它的机器。 解决方案是
我对Spark,Scala和Cassandra都是新手。使用Spark,我试图从MySQL获取一些ID。 我可以看到在控制台打印的ID。 当我试图在每个提取id上运行相同的函数时 它给出与例外相同的例外 在阅读spark-shell中的Apache spark:“sparkException:Task not serializable”后,我尝试将@transient添加到RDDs中
null 每当我尝试访问sc时,我会得到以下错误。我在这里做错了什么?
问题内容: 编写以下Java程序来试验apache spark。 该程序尝试从相应的文件中读取正负列表,将其与主文件进行比较并相应地过滤结果。 执行spark作业时引发以下错误, 任何指针? 问题答案: 创建匿名类时,编译器会做一些事情: 它将被重写为: 这就是为什么您可以使用的原因,因为迭代器不可序列化。 为了避免这种情况,只需在提取出next的结果之前:
null 代码段: }
问题在于Spark数据集和INT列表的序列化。Scala版本是2.10.4,Spark版本是1.6。 这和其他问题类似,但是我不能基于这些回答让它工作。我已经简化了代码,以便仅仅显示问题。 我有一门案例课: 我的主要方法是: 我得到以下错误: 如果我从FlightExt中删除列表,那么一切正常,这表明lambda函数序列化没有问题。 Scala本身似乎序列化了一系列Int的优点。也许Spark在序