我应该只使用kryo吗?混合和匹配可以吗(就像我正在做的那样)?
当您将spark.serializer
设置为org.apache.spark.serializer.kryoserializer
时,RDDs中的所有对象(它不包括closures*)都将使用kryo进行序列化。类注册只是提高性能的一种方法(注册的类只需要一个整数id,而不是与序列化对象一起存储的完全限定的类名)。您可以查看Kryo文档的相关部分了解详细信息。
换句话说,如果您关心性能,您应该注册所有必须在程序中序列化的类,但是您已经以某种方式使用了Kryo。
*闭包是使用标准Java序列化进行序列化的,在Kryo中注册并不影响这一点,所以如果要通过闭包传递一些对象,您仍然必须使用Java.io.serializable
。
我在程序中使用,需要序列化内核以便以后重用它们。 为此,我使用: 如何定义必须使用?
我用这个打开了kryo连载: 我希望确保当在节点之间洗牌时,使用kryo对自定义类进行序列化。我可以通过以下方式向kryo注册该类: 但这会导致IllegalArugmentException被抛出(“class未注册”),用于我假设Spark在内部使用的一系列不同类,例如: 当然,我不必用Kryo手动注册这些单独的类?这些序列化程序都是在kryo中定义的,那么有没有一种方法可以自动注册所有的序列
null 但是,当我以Yar-Client模式提交Spark应用程序时,抛出了以下异常: 线程“main”org.apache.spark.sparkException:Task not serializable at org.apache.spark.util.closureCleaner$.ensureRecleaner.ccala:166)at org.apache.spark.util.c
我正在尝试使用kryo序列化和反序列化到二进制。我想我已经完成了序列化,但似乎无法反序列化。下面是我正在处理的代码,但最终我想存储一个字节[],然后再次读取它。文档只显示了如何使用文件。
我有一个类,它通过实现中的和方法来实现自定义Kryo序列化程序(请参见下面的示例)。如何用Spark注册此自定义序列化程序? 现在在Spark: 不幸的是,Spark没有给我注册自定义序列化程序的选项。你知道有没有办法做到这一点?
要强制spark使用kryo序列化,可以设置以下选项。克鲁约。需要注册。 如何注册组织。阿帕奇。火花sql。类型。数据类型[]? 这是抛出异常。但是尝试像这样注册将不会编译