Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Serialization 如何在ApacheSpark中向Kryo序列化程序注册类?_Serialization_Apache Spark_Pyspark_Kryo - Fatal编程技术网

Serialization 如何在ApacheSpark中向Kryo序列化程序注册类?

Serialization 如何在ApacheSpark中向Kryo序列化程序注册类?,serialization,apache-spark,pyspark,kryo,Serialization,Apache Spark,Pyspark,Kryo,我正在使用Spark 1.6.1和Python。使用PySpark时如何启用Kryo序列化 我在spark-default.conf文件中有以下设置: spark.eventLog.enabled true spark.eventLog.dir //local_drive/sparkLogs spark.default.parallelism 8 spark.locality.wait.node 5s

我正在使用Spark 1.6.1和Python。使用PySpark时如何启用Kryo序列化

我在spark-default.conf文件中有以下设置:

spark.eventLog.enabled             true
spark.eventLog.dir                 //local_drive/sparkLogs
spark.default.parallelism          8
spark.locality.wait.node           5s
spark.executor.extraJavaOptions    -XX:+UseCompressedOops
spark.serializer                   org.apache.spark.serializer.KryoSerializer
spark.kryo.classesToRegister      Timing, Join, Select, Predicate, Timeliness, Project, Query2, ScanSelect
spark.shuffle.compress             true
以及以下错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o35.load.
: org.apache.spark.SparkException: Failed to register classes with Kryo
at org.apache.spark.serializer.KryoSerializer.newKryo(KryoSerializer.scala:128)
at org.apache.spark.serializer.KryoSerializerInstance.borrowKryo(KryoSerializer.scala:273)
at org.apache.spark.serializer.KryoSerializerInstance.<init>(KryoSerializer.scala:258)
at org.apache.spark.serializer.KryoSerializer.newInstance(KryoSerializer.scala:174)

Caused by: java.lang.ClassNotFoundException: Timing
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:274)
at org.apache.spark.serializer.KryoSerializer$$anonfun$newKryo$4.apply(KryoSerializer.scala:120)
at org.apache.spark.serializer.KryoSerializer$$anonfun$newKryo$4.apply(KryoSerializer.scala:120)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
at org.apache.spark.serializer.KryoSerializer.newKryo(KryoSerializer.scala:120)
我知道“Kryo不会对PySpark产生重大影响,因为它只是将数据存储为byte[]对象,即使使用Java也可以快速序列化。但是,设置spark.serializer而不尝试注册任何类可能是值得的”。但是,我需要注册这些类

提前谢谢

这是不可能的。是一个Java(JVM)序列化框架。它不能与Python类一起使用。为了序列化Python对象,PySpark正在使用Python序列化工具,包括标准模块和。您可以在中找到有关PySpark序列化的其他信息


Sp虽然在使用PySpark时可以启用Kryo序列化,但这不会影响Python对象的序列化方式。它将仅用于Java或Scala对象的序列化。

OK,那么这些类是在哪里定义的呢?你没有试着向Kryo注册Python类,是吗?我注册了,那些计时、谓词等是我的Python类的名称。我通过阅读了解到我必须注册我的课程。我从你的评论中怀疑我错了,但是我应该在那里写些什么呢?我试图理解它,并在文档中找到解决方案或程序,但我仍然不明白。什么都没有。Kryo是一个Java(JVM)序列化框架,而不是Python框架。它是可以与PySpark一起使用的JVM,我只是不知道如何使用。不,它不能。当使用PySpark时,Kryo可以用来序列化Java对象,这与序列化Python对象不同。are
PySpark.{ml,mllib}.linalg.Vectors
Java/scala-objects-under-the-hood?@εόφιλοορτίΔηςNo,但是可以在某些上下文中透明地映射到JVM对象。所以在提交pyspark作业时设置
--conf spark.serializer=org.apache.spark.serializer.KryoSerializer
并没有真正使用Kryo序列化程序?
from Timing import Timing
from Predicate import Predicate
from Join import Join 
from ScanSelect import ScanSelect 
from Select import Select
from Timeliness import Timeliness
from Project import Project

conf = SparkConf().setMaster(master).setAppName(sys.argv[1]).setSparkHome("$SPARK_HOME")
sc = SparkContext(conf=conf)
conf.set("spark.kryo.registrationRequired", "true")
sqlContext = SQLContext(sc)