【发布时间】:2017-08-16 20:17:58
【问题描述】:
我正在运行 pyspark 脚本并在下面遇到错误。由于我的代码“if len(rdd.take(1)) > 0:”,似乎在说“RuntimeError:在迭代期间设置更改的大小”。我不确定这是否是真正的原因,并且想知道到底出了什么问题。任何帮助将不胜感激。
谢谢!
17/03/23 21:54:17 INFO DStreamGraph: Updated checkpoint data for time 1490320070000 ms 17/03/23 21:54:17 INFO JobScheduler: Finished job streaming job 1490320072000 ms.0 from job set of time 1490320072000 ms 17/03/23 21:54:17 INFO JobScheduler: Starting job streaming job 1490320072000 ms.1 from job set of time 1490320072000 ms 17/03/23 21:54:17 ERROR JobScheduler: Error running job streaming job 1490320072000 ms.0 org.apache.spark.SparkException: An exception was raised by Python: Traceback (most recent call last): File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/streaming/util.py",第 65 行,通话中 r = self.func(t, *rdds) 文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/streaming/dstream.py”, 第 159 行,在 func = lambda t, rdd: old_func(rdd) 文件“/home/richard/Documents/spark_code/with_kafka/./mongo_kafka_spark_script.py”, 第 96 行,在 _compute_glb_max 中 如果 len(rdd.take(1)) > 0: 文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/rdd.py”,第 1343 行,在采取 res = self.context.runJob(self, takeUpToNumLeft, p) 文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/context.py”,第 965 行,在 runJob 端口 = self._jvm.PythonRDD.runJob(self._jsc.sc(), mappedRDD._jrdd, partitions) _jrdd 中的文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/rdd.py”,第 2439 行 self._jrdd_deserializer,分析器) _wrap_function 中的文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/rdd.py”,第 2372 行 pickled_command,broadcast_vars,env,包括 = _prepare_for_python_RDD(sc, command) _prepare_for_python_RDD 中的文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/rdd.py”,第 2363 行 broadcast_vars = [x._jbroadcast for x in sc._pickled_broadcast_vars] RuntimeError:在迭代期间设置更改的大小
at org.apache.spark.streaming.api.python.TransformFunction.callPythonTransformFunction(PythonDStream.scala:95) at org.apache.spark.streaming.api.python.TransformFunction.apply(PythonDStream.scala:78) at org.apache.spark.streaming.api.python.PythonDStream$$anonfun$callForeachRDD$1.apply(PythonDStream.scala:179) at org.apache.spark.streaming.api.python.PythonDStream$$anonfun$callForeachRDD$1.apply(PythonDStream.scala:179) at org.apache.spark.streaming.dstream.ForEachDStream$$anonfun$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(ForEachDStream.scala:51) at org.apache.spark.streaming.dstream.ForEachDStream$$anonfun$1$$anonfun$apply$mcV$sp$1.apply(ForEachDStream.scala:51) at org.apache.spark.streaming.dstream.ForEachDStream$$anonfun$1$$anonfun$apply$mcV$sp$1.apply(ForEachDStream.scala:51) at org.apache.spark.streaming.dstream.DStream.createRDDWithLocalProperties(DStream.scala:415) at org.apache.spark.streaming.dstream.ForEachDStream$$anonfun$1.apply$mcV$sp(ForEachDStream.scala:50) at org.apache.spark.streaming.dstream.ForEachDStream$$anonfun$1.apply(ForEachDStream.scala:50) at org.apache.spark.streaming.dstream.ForEachDStream$$anonfun$1.apply(ForEachDStream.scala:50) at scala.util.Try$.apply(Try.scala:192) at org.apache.spark.streaming.scheduler.Job.run(Job.scala:39) at org.apache.spark.streaming.scheduler.JobScheduler$JobHandler$$anonfun$run$1.apply$mcV$sp(JobScheduler.scala:254) at org.apache.spark.streaming.scheduler.JobScheduler$JobHandler$$anonfun$run$1.apply(JobScheduler.scala:254) at org.apache.spark.streaming.scheduler.JobScheduler$JobHandler$$anonfun$run$1.apply(JobScheduler.scala:254) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58) at org.apache.spark.streaming.scheduler.JobScheduler$JobHandler.run(JobScheduler.scala:253) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Traceback (most recent call last): File "/home/richard/Documents/spark_code/with_kafka/./mongo_kafka_spark_script.py",第 224 行,在 ssc.awaitTermination(); 文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/streaming/context.py”, 第 206 行,等待终止 文件“/usr/lib/spark/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py”, 第 1133 行,在 调用 文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/utils.py”,第 63 行, 在装饰中 文件“/usr/lib/spark/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py”,行 319,在get_return_value中 py4j.protocol.Py4JJavaError:调用 o38.awaitTermination 时出错。 :org.apache.spark.SparkException:Python引发了异常: 回溯(最近一次通话最后): 文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/streaming/util.py”, 第 65 行,通话中 r = self.func(t, *rdds) 文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/streaming/dstream.py”, 第 159 行,在 func = lambda t, rdd: old_func(rdd) 文件“/home/richard/Documents/spark_code/with_kafka/./mongo_kafka_spark_script.py”, 第 96 行,在 _compute_glb_max 中 如果 len(rdd.take(1)) > 0: 文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/rdd.py”,第 1343 行,在采取 res = self.context.runJob(self, takeUpToNumLeft, p) 文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/context.py”,第 965 行,在 runJob 端口 = self._jvm.PythonRDD.runJob(self._jsc.sc(), mappedRDD._jrdd, partitions) _jrdd 中的文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/rdd.py”,第 2439 行 self._jrdd_deserializer,分析器) _wrap_function 中的文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/rdd.py”,第 2372 行 pickled_command,broadcast_vars,env,包括 = _prepare_for_python_RDD(sc, command) _prepare_for_python_RDD 中的文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/rdd.py”,第 2363 行 broadcast_vars = [x._jbroadcast for x in sc._pickled_broadcast_vars] RuntimeError:在迭代期间设置更改的大小
at org.apache.spark.streaming.api.python.TransformFunction.callPythonTransformFunction(PythonDStream.scala:95) at org.apache.spark.streaming.api.python.TransformFunction.apply(PythonDStream.scala:78) at org.apache.spark.streaming.api.python.PythonDStream$$anonfun$callForeachRDD$1.apply(PythonDStream.scala:179) at org.apache.spark.streaming.api.python.PythonDStream$$anonfun$callForeachRDD$1.apply(PythonDStream.scala:179) at org.apache.spark.streaming.dstream.ForEachDStream$$anonfun$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(ForEachDStream.scala:51) at org.apache.spark.streaming.dstream.ForEachDStream$$anonfun$1$$anonfun$apply$mcV$sp$1.apply(ForEachDStream.scala:51) at org.apache.spark.streaming.dstream.ForEachDStream$$anonfun$1$$anonfun$apply$mcV$sp$1.apply(ForEachDStream.scala:51) at org.apache.spark.streaming.dstream.DStream.createRDDWithLocalProperties(DStream.scala:415) at org.apache.spark.streaming.dstream.ForEachDStream$$anonfun$1.apply$mcV$sp(ForEachDStream.scala:50) at org.apache.spark.streaming.dstream.ForEachDStream$$anonfun$1.apply(ForEachDStream.scala:50) at org.apache.spark.streaming.dstream.ForEachDStream$$anonfun$1.apply(ForEachDStream.scala:50) at scala.util.Try$.apply(Try.scala:192) at org.apache.spark.streaming.scheduler.Job.run(Job.scala:39) at org.apache.spark.streaming.scheduler.JobScheduler$JobHandler$$anonfun$run$1.apply$mcV$sp(JobScheduler.scala:254) at org.apache.spark.streaming.scheduler.JobScheduler$JobHandler$$anonfun$run$1.apply(JobScheduler.scala:254) at org.apache.spark.streaming.scheduler.JobScheduler$JobHandler$$anonfun$run$1.apply(JobScheduler.scala:254) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58) at org.apache.spark.streaming.scheduler.JobScheduler$JobHandler.run(JobScheduler.scala:253) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
【问题讨论】:
-
我把那部分代码改成了“if not rdd.isEmpty():”,得到了同样的错误。
-
RuntimeError: Set changed size during iteration表示您正在处理set类型的对象,并且在您操作它时它已经改变了大小(或者您可能使用它)。这会引发错误,因为集合是不可变的。希望你能概括出这个类似的问题stackoverflow.com/questions/22846719/… -
感谢您的建议!
标签: python apache-spark pyspark