小编use*_*725的帖子

Spark:写入Avro文件

我在Spark,我有一个Avro文件的RDD.我现在想对该RDD进行一些转换并将其保存为Avro文件:

val job = new Job(new Configuration())
AvroJob.setOutputKeySchema(job, getOutputSchema(inputSchema))

rdd.map(elem => (new SparkAvroKey(doTransformation(elem._1)), elem._2))
   .saveAsNewAPIHadoopFile(outputPath, 
  classOf[AvroKey[GenericRecord]], 
  classOf[org.apache.hadoop.io.NullWritable], 
  classOf[AvroKeyOutputFormat[GenericRecord]], 
  job.getConfiguration)
Run Code Online (Sandbox Code Playgroud)

运行时,Spark会抱怨Schema $ recordSchema不可序列化.

如果我取消注释.map调用(并且只有rdd.saveAsNewAPIHadoopFile),则调用成功.

我在这做错了什么?

任何的想法?

serialization scala avro apache-spark

17
推荐指数
2
解决办法
1万
查看次数

Java序列化和重复对象

我有以下设置:

public class A {
  private Set<C> cSet;
}

public class B {
  private Set<C> cSet;
}

public class C {}
Run Code Online (Sandbox Code Playgroud)

A和B的cSet可能引用了相同的C实例.我想序列化A和B,以便在反序列化时我没有重复的C对象.如果我将它序列化/反序列化到同一个ObjectOutputStream中,Java是否知道如何做正确的事情,或者我最终会得到比我开始时更多的C实例?

java serialization duplicates

13
推荐指数
1
解决办法
1197
查看次数

performBlockAndWait创建死锁

我正在编写一个执行一些CoreData内容的函数.我希望函数只所有CoreData操作执行后才返回.CoreData的东西包括在后台上下文中创建一个对象,然后在父上下文中做更多的东西:

+ (void) myFunction
    NSManagedObjectContext *backgroundContext = [DatabaseDelegate sharedDelegate].backgroundContext;

    [backgroundContext performBlockAndWait:^{
      MyObject *bla = create_my_object_in:backgroundContext;

      [backgroundContext obtainPermanentIDsForObjects:[[backgroundContext insertedObjects] allObjects] error:nil];
      [backgroundContext save:nil];

      [[DatabaseDelegate sharedDelegate].parent.managedObjectContext performBlockAndWait:^{
        [[DatabaseDelegate sharedDelegate].parent updateChangeCount:UIDocumentChangeDone];

        // Do some more stuff
        NSOperationQueue *queue = [[NSOperationQueue alloc] init];
        [queue addOperation:someOperation];
      }];
    }];
   return;
}
Run Code Online (Sandbox Code Playgroud)

我希望回归只发生在之后[queue addOperation:someOperation].这似乎适用于大多数情况,但我有一个案例,当这个函数永远不会返回.好像它已陷入僵局,我怀疑这是因为performBlockAndWait.

我的问题是:

(1)有人可以解释为什么会出现这种僵局吗?

(2)实现相同功能的正确方法是什么?要求是myFunction仅在两个块都已执行后才返回.

谢谢!

deadlock core-data objective-c nsmanagedobjectcontext ios

5
推荐指数
1
解决办法
6532
查看次数