PySpark 抛出 ImportError,但 Module 确实存在并且运行良好
PySpark throws ImportError, but Module actually exists and works well
我正在使用 Cloudera,Spark 版本是 2.1.0。
我试图交叉连接两个表并创建一个具有模糊匹配率的列(因此我需要导入 fuzzywuzzy
)。这是代码:
from fuzzywuzzy import fuzz
def fuzzy_ratio(x,y):
from fuzzywuzzy import fuzz
res = fuzz.token_set_ratio(x,y)
return res
fuzz_udf = F.udf(fuzzy_ratio,IntegerType()) # register UDF
Master = tableA.crossJoin(tableB) \
.withColumn('ratio',fuzz_udf(tableA['colA'],tableB['colB']))
它抛出
ImportError: No module named fuzzywuzzy
at org.apache.spark.api.python.PythonRunner$$anon.read(PythonRDD.scala:193)
at org.apache.spark.api.python.PythonRunner$$anon.<init>(PythonRDD.scala:234)
at org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:152)
at org.apache.spark.sql.execution.python.BatchEvalPythonExec$$anonfun$doExecute.apply(BatchEvalPythonExec.scala:144)
at org.apache.spark.sql.execution.python.BatchEvalPythonExec$$anonfun$doExecute.apply(BatchEvalPythonExec.scala:87)
at org.apache.spark.rdd.RDD$$anonfun$mapPartitions$$anonfun$apply.apply(RDD.scala:796)
但是当我在交互式 shell 中输入它时 fuzzy.token_set_ratio
有效。所以我真的不知道这里发生了什么。
有人可以帮我解答一下吗?百万感谢!
这是因为包 fuzzywuzzy 并非在所有工作节点中都可用。一种解决方法是让您在所有工作程序节点中安装此包。
为了标准化此设置,它需要集群级别的配置。有关详细信息,请参阅 thisclouderalink。
我遇到了类似的错误,我将 fuzzywuzzy 依赖项添加到我的 spark 提交命令中。
首先压缩两个包 folders.In 我的情况,文件夹位于 C:\Anaconda2\Lib\site-packages\fuzzywuzzy
和 C:\Anaconda2\Lib\site-packages\fuzzywuzzy-0.15.0.dist-info
然后我将 zip 文件添加到 spark-submit
命令中
../bin/spark-submit /path/to/mycode.py --py-files /path/to/fuzzywuzzy.zip
这确保所有工作节点都获得 fuzzywuzzy 依赖性。
还有一个选项可以稍后在 sparkContext 中添加此依赖项,如 spark.sparkContext.addPyFile('/path/to/fuzzywuzzy.zip')
我正在使用 Cloudera,Spark 版本是 2.1.0。
我试图交叉连接两个表并创建一个具有模糊匹配率的列(因此我需要导入 fuzzywuzzy
)。这是代码:
from fuzzywuzzy import fuzz
def fuzzy_ratio(x,y):
from fuzzywuzzy import fuzz
res = fuzz.token_set_ratio(x,y)
return res
fuzz_udf = F.udf(fuzzy_ratio,IntegerType()) # register UDF
Master = tableA.crossJoin(tableB) \
.withColumn('ratio',fuzz_udf(tableA['colA'],tableB['colB']))
它抛出
ImportError: No module named fuzzywuzzy
at org.apache.spark.api.python.PythonRunner$$anon.read(PythonRDD.scala:193)
at org.apache.spark.api.python.PythonRunner$$anon.<init>(PythonRDD.scala:234)
at org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:152)
at org.apache.spark.sql.execution.python.BatchEvalPythonExec$$anonfun$doExecute.apply(BatchEvalPythonExec.scala:144)
at org.apache.spark.sql.execution.python.BatchEvalPythonExec$$anonfun$doExecute.apply(BatchEvalPythonExec.scala:87)
at org.apache.spark.rdd.RDD$$anonfun$mapPartitions$$anonfun$apply.apply(RDD.scala:796)
但是当我在交互式 shell 中输入它时 fuzzy.token_set_ratio
有效。所以我真的不知道这里发生了什么。
有人可以帮我解答一下吗?百万感谢!
这是因为包 fuzzywuzzy 并非在所有工作节点中都可用。一种解决方法是让您在所有工作程序节点中安装此包。
为了标准化此设置,它需要集群级别的配置。有关详细信息,请参阅 thisclouderalink。
我遇到了类似的错误,我将 fuzzywuzzy 依赖项添加到我的 spark 提交命令中。
首先压缩两个包 folders.In 我的情况,文件夹位于 C:\Anaconda2\Lib\site-packages\fuzzywuzzy
和 C:\Anaconda2\Lib\site-packages\fuzzywuzzy-0.15.0.dist-info
然后我将 zip 文件添加到 spark-submit
命令中
../bin/spark-submit /path/to/mycode.py --py-files /path/to/fuzzywuzzy.zip
这确保所有工作节点都获得 fuzzywuzzy 依赖性。
还有一个选项可以稍后在 sparkContext 中添加此依赖项,如 spark.sparkContext.addPyFile('/path/to/fuzzywuzzy.zip')