PySpark带来了巨大的恐惧,但该模块实际上存在并且运行良好

PySpark带来了巨大的恐惧,但该模块实际上存在并且运行良好,pyspark,user-defined-functions,cloudera,pyspark-sql,fuzzywuzzy,Pyspark,User Defined Functions,Cloudera,Pyspark Sql,Fuzzywuzzy,我使用的是Cloudera,Spark版本是2.1.0 我试图交叉连接两个表并创建一个具有模糊匹配比率的列(因此我需要导入fuzzyfuzzy)。代码如下: 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,IntegerT

我使用的是Cloudera,Spark版本是2.1.0

我试图交叉连接两个表并创建一个具有模糊匹配比率的列(因此我需要导入
fuzzyfuzzy
)。代码如下:

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$1.read(PythonRDD.scala:193)
at org.apache.spark.api.python.PythonRunner$$anon$1.<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$1.apply(BatchEvalPythonExec.scala:144)
at org.apache.spark.sql.execution.python.BatchEvalPythonExec$$anonfun$doExecute$1.apply(BatchEvalPythonExec.scala:87)
at org.apache.spark.rdd.RDD$$anonfun$mapPartitions$1$$anonfun$apply$23.apply(RDD.scala:796)
ImportError:没有名为fuzzywuzzy的模块
位于org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:193)
位于org.apache.spark.api.python.PythonRunner$$anon$1。(PythonRDD.scala:234)
位于org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:152)
位于org.apache.spark.sql.execution.python.BatchEvalPythonExec$$anonfun$doExecute$1.apply(BatchEvalPythonExec.scala:144)
位于org.apache.spark.sql.execution.python.BatchEvalPythonExec$$anonfun$doExecute$1.apply(BatchEvalPythonExec.scala:87)
位于org.apache.spark.rdd.rdd$$anonfun$mapPartitions$1$$anonfun$apply$23.apply(rdd.scala:796)
但是
fuzzy.token\u set\u ratio
在交互式shell中输入时起作用。所以我真的不知道这里发生了什么


有谁能帮我回答这个问题吗?万分感谢

这是因为包fuzzyfuzzy在所有工作节点中都不可用。一种解决方法是在所有工作节点中安装此包


为了标准化此设置,它需要群集级别的配置。有关更多详细信息,请参阅cloudera链接。

我遇到了类似的错误,我在spark submit命令中添加了模糊模糊依赖项

首先压缩两个包文件夹。在我的例子中,文件夹位于位置
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

这将确保所有工作节点都获得fuzzyfuzzy依赖项


稍后在sparkContext中还可以选择添加此依赖项,如
spark.sparkContext.addPyFile('/path/to/fuzzywuzzy.zip')

@JingyingZhou欢迎您-请接受答案:)