【发布时间】:2018-07-12 17:42:02
【问题描述】:
我有一个 pyspark 流式传输工作,按照这些思路做一些事情:
def printrddcount(rdd):
c = rdd.count()
print("{1}: Received an RDD of {0} rows".format("CANNOTCOUNT", datetime.now().isoformat()) )
然后:
...
stream.foreachRDD(printrddcount)
据我所知,printrdd 函数将在工作人员中执行 而且,是的,我知道在工作人员中执行 print() 是个坏主意。但这不是重点。 我很确定这段代码直到最近才有效。 (而且,它看起来不一样,因为 'c' 的内容实际上是打印在 print 语句中,而不是仅仅收集,然后丢弃......)
但现在,似乎(突然?),然后 rdd.count() 已经停止工作,并且正在让我的工作进程死亡说:
UnpicklingError: NEWOBJ class argument has NULL tp_new
完整的(好吧,仅限 python)堆栈跟踪:
Caused by: org.apache.spark.api.python.PythonException: Traceback (most recent call last):
File "/usr/hdp/current/spark2-client/python/lib/pyspark.zip/pyspark/worker.py", line 163, in main
func, profiler, deserializer, serializer = read_command(pickleSer, infile)
File "/usr/hdp/current/spark2-client/python/lib/pyspark.zip/pyspark/worker.py", line 54, in read_command
command = serializer._read_with_length(file)
File "/usr/hdp/current/spark2-client/python/lib/pyspark.zip/pyspark/serializers.py", line 169, in _read_with_length
return self.loads(obj)
File "/usr/hdp/current/spark2-client/python/lib/pyspark.zip/pyspark/serializers.py", line 454, in loads
return pickle.loads(obj)
UnpicklingError: NEWOBJ class argument has NULL tp_new
确实,它失败的那一行是 rdd.count()
知道为什么 rdd.count() 会失败吗? 如果某些东西应该被序列化,它应该是 rdd,对吧?
【问题讨论】:
标签: apache-spark pyspark spark-streaming