【发布时间】:2017-07-11 16:45:46
【问题描述】:
我使用的是 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$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)
但是fuzzy.token_set_ratio 在我在交互式 shell 中输入时可以工作。所以我真的不知道这里发生了什么。
有人可以帮忙解答我的问题吗?谢谢一百万!
【问题讨论】:
标签: pyspark user-defined-functions cloudera pyspark-sql fuzzywuzzy