我有一个CSV文件,正在将其读取到Pyspark数据框中,然后进行清理;删除超过一定长度的记录,根据内容等进行过滤。这些都可以正常工作。然后,我使用UDF删除第一个字符,并用零回填以使列中数据的长度一致。
一周前运行代码时,它运行良好。它产生了预期的结果,写得很好。今天,当我尝试运行它时,在CDSW控制台中收到大量红色文本,从根本上说我的工人正在运行Python 2.7和驱动程序3.6。只有UDF发生了故障,我尝试了一些更简单的UDF来查看它们是否起作用-不能。
我无法复制完整的堆栈跟踪,因为它是在虚拟环境中进行的,但是这里键入了以下两行:
File "/opt/cloudera/parcels/SPARK2-2.2.0.cloudera2-1.cdh5.12.0.p0.232957/lib.spark2/python/lib/pyspark.zip/pyspark/worker.py", line 123, in main ("%d.%d" % sys.version_info[:2], version))
Exception: Python in worker has different version 2.7 than that in driver 3.6, Pyspark cannot run with different minor versions.'
下面的一些示例代码-一周前有效,但现在崩溃了。
from pyspark.sql import SparkSession
from pyspark.sql.types import *
from pyspark.sql import functions as F
def appender(input):
ic = input[1:]
ic += ((5 - len(ic)) * '0')
return ic
append_udf = F.udf(appender, StringType())
df = spark.read.csv('/path/file.csv', header = False)
df_short = df.select(['_c0', '_c1'])
df_length_filtered = df_short.where(F.length('_c0') <= 5)
df_5dig = df_length_filtered.withColumn('_c0',append_udf(df_lenght_filtered['_c0']))
仅使用test_udf = F.udf(lambda x: x+ 'asaf', StringType())
之类的内容也会引起同样的问题。
这都是在严格控制的CDSW环境下完成的,上周我没有更改任何配置设置。其他所有功能在其他功能中似乎都可以正常工作,只是这些UDF引发了问题。任何建议将不胜感激。