私はClouderaを使用していますが、Sparkのバージョンは2.1.0です。PySparkはImportErrorをスローしますが、モジュールは実際に存在し、うまく動作します。
私は2つのテーブルをクロスジョインしようとしていて、ファジーマッチ率の列を作成しようとしていました(したがって、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
作品をスローした場合、インタラクティブシェルで、私はそれを入力。だから私は本当にここで何が起こっているのか分からない。
誰でも私の質問にお手伝いできますか?感謝万円!
として後でsparkContextでこの依存関係を追加するオプションもあります。ありがとう! –
@ JingyingZhou歓迎です - 答えを受け入れてください:) – user24225