在 pyspark 中的数据帧上应用 udf 后出错
Posted
技术标签:
【中文标题】在 pyspark 中的数据帧上应用 udf 后出错【英文标题】:error after applying a udf on a dataframe in pyspark 【发布时间】:2019-08-24 00:04:43 【问题描述】:PYSPARK 版本 2.3.2
我在 pyspark 中有数据框 (df),其架构如下:
>>> df.printSchema
<bound method DataFrame.printSchema of
DataFrame[id: string,
F: string,
D: string,
T: string,
S: string,
P: string]>
我有以下简化的 UDF:
rep = UserDefinedFunction(lambda x: x.replace(":",";"))
我做的:
df1 = df.withColumn("occ", rep(col("D")))
但是在df1.show()之后有错误:
df1.show()
[Stage 9:>
(0 + 1) / 1]19/08/23 23:59:15 WARN
org.apache.spark.scheduler.TaskSetManager:
Lost task 0.0 in stage 9.0 (TID 30, cluster, executor 1):
java.io.IOException:
Cannot run program "/opt/conda/bin/python":
error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at .....
Caused by: java.io.IOException: error=2, No such file or directory
19/08/23 23:59:16 ERROR
org.apache.spark.scheduler.TaskSetManager: Task 0 in stage 9.0 failed 4 times; aborting job
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/spark/python/pyspark/sql/dataframe.py", line 350, in show
print(self._jdf.showString(n, 20, vertical))
File "/usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
File "/usr/lib/spark/python/pyspark/sql/utils.py", line 63, in deco
return f(*a, **kw)
File "/usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py", line 328, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o339.showString.
.......
【问题讨论】:
【参考方案1】:您的安装似乎有问题。
Cannot run program "/opt/conda/bin/python":
error=2, No such file or directory
【讨论】:
【参考方案2】:问题是安装的 conda 包覆盖了默认的 python,这导致了错误。
【讨论】:
【参考方案3】:也许问题不在您的代码中。
检查您正在使用的 Java JDK 的版本。我知道.show()
方法与Java JDK 11不兼容。如果你使用这个版本,只需降级到版本8。不要忘记正确配置JDK 8的环境变量。
【讨论】:
以上是关于在 pyspark 中的数据帧上应用 udf 后出错的主要内容,如果未能解决你的问题,请参考以下文章
如何在 pyspark 中的数据帧上使用 fuzz.ratio