【问题标题】:PySpark RuntimeError: Set changed size during iterationPySpark RuntimeError:在迭代期间设置更改的大小
【发布时间】: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


【解决方案1】:

在迭代之间创建广播变量似乎不是最佳实践。如果需要有状态数据,请始终使用 updateStateByKey。

【讨论】:

    【解决方案2】:

    试试

    if rdd.count() <1 :
    

    take() 可以给出异常,但是,如果有更多详细信息,我们可以查明错误。

    【讨论】:

    • 你确定吗?
    猜你喜欢
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    相关资源
    最近更新 更多