Python 3.x 使用用户定义函数时如何解决SparkException?

Python 3.x 使用用户定义函数时如何解决SparkException?,python-3.x,pyspark,Python 3.x,Pyspark,我需要通过文本检测语言,并使用PySpark翻译该文本。我在PySpark中找不到任何函数,所以我创建了自己的UDF 语言检测 def detectlang(string): b = TextBlob(string) return b.detect_language() detectlang_udf = udf(detectlang) def translate(string): trans = Translator() return trans.translate(

我需要通过文本检测语言,并使用PySpark翻译该文本。我在PySpark中找不到任何函数,所以我创建了自己的UDF

语言检测

def detectlang(string):
    b = TextBlob(string)
    return b.detect_language()

detectlang_udf = udf(detectlang)
def translate(string):
  trans = Translator()
  return trans.translate(string).text

translate_udf = udf(translate, StringType())
翻译

def detectlang(string):
    b = TextBlob(string)
    return b.detect_language()

detectlang_udf = udf(detectlang)
def translate(string):
  trans = Translator()
  return trans.translate(string).text

translate_udf = udf(translate, StringType())
但是,当我调用这些函数并询问结果时,我得到以下错误:

result = dict_comments[13].withColumn("lang", detectlang_udf(col('Text')))
result.show()

org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 15.0 failed 1 times, most recent failure: Lost task 0.0 in stage 15.0 (TID 15, localhost, executor driver): org.apache.spark.api.python.PythonException: Traceback (most recent call last):
编辑(完全错误)

---------------------------------------------------------------------------
Py4JJavaError回溯(最近一次调用)
在里面
1 result=dict_comments[13]。带列(“lang”,检测lang_udf(col('Text'))
---->2结果显示()
/show中的databricks/spark/python/pyspark/sql/dataframe.py(self,n,truncate,vertical)
379         """
380如果存在(截断,布尔)和截断:
-->381打印(self._jdf.showString(n,20,垂直))
382其他:
383打印(self._jdf.showString(n,int(截断),垂直))
/调用中的databricks/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py(self,*args)
1255 answer=self.gateway\u client.send\u命令(command)
1256返回值=获取返回值(
->1257应答,self.gateway_客户端,self.target_id,self.name)
1258
1259对于临时参数中的临时参数:
/deco中的databricks/spark/python/pyspark/sql/utils.py(*a,**kw)
61 def装饰(*a,**千瓦):
62尝试:
--->63返回f(*a,**kw)
64除py4j.protocol.Py4JJavaError外的其他错误为e:
65 s=e.java_exception.toString()
/获取返回值(应答、网关客户端、目标id、名称)中的databricks/spark/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py
326 raise Py4JJavaError(
327“调用{0}{1}{2}时出错。\n”。
-->328格式(目标id,“.”,名称),值)
329其他:
330升起Py4JError(
Py4JJavaError:调用o872.showString时出错。
:org.apache.SparkException:Job因阶段失败而中止:阶段15.0中的任务0失败1次,最近的失败:阶段15.0中的任务0.0丢失(TID 15,localhost,executor driver):org.apache.spark.api.python异常:回溯(最近一次调用):
文件“/databricks/spark/python/pyspark/worker.py”,第480行,在main中
过程()
文件“/databricks/spark/python/pyspark/worker.py”,第472行,正在处理中
序列化程序.dump_流(out_iter,outfile)
文件“/databricks/spark/python/pyspark/serializers.py”,第456行,在dump_流中
self.serializer.dump_流(self._批处理(迭代器),流)
文件“/databricks/spark/python/pyspark/serializers.py”,第149行,在dump_流中
对于迭代器中的obj:
文件“/databricks/spark/python/pyspark/serializers.py”,第445行,分批处理
对于迭代器中的项:
文件“”,第1行,在
文件“/databricks/spark/python/pyspark/worker.py”,第87行,在
返回λ*a:f(*a)
文件“/databricks/spark/python/pyspark/util.py”,第99行,在包装器中
返回f(*args,**kwargs)
文件“”,第3行,在detectlang中
文件“/databricks/python/lib/python3.7/site packages/textblob/blob.py”,第568行,使用detect_语言
返回self.translator.detect(self.raw)
文件“/databricks/python/lib/python3.7/site packages/textblob/translate.py”,第69行,在detect中
raise TRANSPORERROR('必须提供至少包含3个字符的字符串')
textblob.exceptions.TranslatorError:必须提供至少包含3个字符的字符串。
位于org.apache.spark.api.python.BasePythonRunner$readeriator.handlePythonException(PythonRunner.scala:534)
位于org.apache.spark.sql.execution.python.PythonUDFRunner$$anon$1.read(PythonUDFRunner.scala:81)
位于org.apache.spark.sql.execution.python.PythonUDFRunner$$anon$1.read(PythonUDFRunner.scala:64)
位于org.apache.spark.api.python.BasePythonRunner$readerierator.hasNext(PythonRunner.scala:488)
在org.apache.spark.interruptblediator.hasNext(interruptblediator.scala:37)
位于scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:440)
位于scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:409)
位于scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:409)
位于org.apache.spark.sql.catalyst.expressions.GeneratedClass$GenerateEditorForCodeGenStage2.processNext(未知源)
位于org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
位于org.apache.spark.sql.execution.whisttagecodegenexec$$anonfun$13$$anon$1.hasNext(whisttagecodegenexec.scala:640)
位于org.apache.spark.sql.execution.collect.UnsafeRowBatchUtils$.encodeUnsafeRows(UnsafeRowBatchUtils.scala:62)
位于org.apache.spark.sql.execution.Collector.Collector$$anonfun$2.apply(Collector.scala:159)
位于org.apache.spark.sql.execution.Collector.Collector$$anonfun$2.apply(Collector.scala:158)
位于org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:90)
位于org.apache.spark.scheduler.Task.doRunTask(Task.scala:140)
位于org.apache.spark.scheduler.Task.run(Task.scala:113)
位于org.apache.spark.executor.executor$TaskRunner$$anonfun$13.apply(executor.scala:528)
位于org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1526)
位于org.apache.spark.executor.executor$TaskRunner.run(executor.scala:534)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
运行(Thread.java:748)
驱动程序堆栈跟踪:
位于org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:2360)
位于org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:2348)
位于org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:2347)
在scala.collection.mutable.Re