spark调用python_在MRS集群中使用Python3.7运行PySpark程序,调用RDD的take函数报错处理...

现象

如果我们安装了python3.7版本来运行spark,并且用到了RDD的take函数,就会报错:RuntimeError: generator raised StopIteration

我们可以编写一个python脚本test.py来进行测试,用spark-submit命令提交: spark-submit test.pyfrom pyspark.sql import SparkSession

spark = SparkSession\

.builder\

.appName("PythonWordCount")\

.getOrCreate()

sc = spark.sparkContext

print(sc.parallelize([1, 2]).take(1))

当然也可以直接在pyspark的交互式shell中执行sc.parallelize([1, 2]).take(1)

执行就会碰到上面说的错误。

原因分析

这个错误是由于Python3.7合入了一个不兼容性修改PEP-0479引起的。

Spark社区已经修复并合入了Spark的2.3.2和2.4版本,具体参考Spark对应的JIRA SPARK-24739。

解决方法

MRS目前使用的版本为Spark 2.2.1,尚未修复。目前可以通过两种方法规避:(推荐)使用Python 3.6,3.5;

参考开源合入,修改提交任务节点的对应python脚本,并打包。具体见下一节。

参考开源合入,修改不兼容的python代码

打开客户端节点,修改/opt/client/Spark/spark/python/pyspark/rdd.py中的takeUpToNumLeft方法。de

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您想了解 pyspark 使用 sc.addPyFile() 方法的具体用法和作用。那么,我来给您讲解一下。 在 pyspark ,我们可以使用 sc.addPyFile() 方法将需要调用Python 文件添加到 Python 路径。这个方法接收一个文件路径作为参数,可以是本地文件路径或者是远程文件路径。这个方法的作用是将指定的文件添加到 SparkPython 路径,以便在 Spark 程序运行时动态调用这个文件的模块和方法。 使用 sc.addPyFile() 方法的步骤如下: 1. 在 Spark 程序使用 sc.addPyFile() 方法将需要调用Python 文件添加到 Python 路径。 2. 在 Spark 程序使用 import 导入需要调用Python 模块。 3. 在 Spark 程序直接调用需要调用Python 模块的方法。 例如,假设我们有一个名为 utils.py 的 Python 文件,其定义了一个名为 add() 的方法。我们可以使用 sc.addPyFile() 方法将这个文件添加到 Python 路径,然后在 Spark 程序直接调用这个方法,如下所示: ``` python from pyspark import SparkContext, SparkConf conf = SparkConf().setAppName("add").setMaster("local") sc = SparkContext(conf=conf) sc.addPyFile("utils.py") import utils rdd = sc.parallelize([1, 2, 3, 4, 5]) result = rdd.map(lambda x: utils.add(x, 1)) print(result.collect()) sc.stop() ``` 在这个例子,我们使用 sc.addPyFile() 方法将 utils.py 文件添加到 Python 路径,然后在 Spark 程序导入 utils 模块,并调用的 add() 方法。最终,程序输出结果为 [2, 3, 4, 5, 6],说明调用成功。 希望这个回答对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值