我有一个镶木 table ,我需要根据UDF进行过滤,然后计算结果以便进一步处理 . 这是交互式工作,但不是火花提交 .

我把这个问题归结为最简单的例子 . 这是交互式代码:

In [26]: table = table.filter(F.udf(lambda x: True, T.BooleanType())('my_field'))

In [27]: table.count()
Out[27]: 819876

但是,当我通过spark-submit(纱线群集模式)执行完全相同的代码时,我得到以下内容:

Caused by: org.apache.spark.api.python.PythonException: Traceback (most recent call last):
File "{path}/pyspark/worker.py", line 137, in main
spark_files_dir = utf8_deserializer.loads(infile)
File "{path}/pyspark/serializers.py", line 549, in loads
return s.decode("utf-8") if self.use_unicode else s
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 13: invalid start byte

我完全被这个困惑了 . 通过spark-submit执行上述操作可能出错的任何想法?

python版本:3.6.3

spark版本:2.1.1

Update

以下以交互方式工作:

In [33]: table.rdd.filter(lambda x: 'my_term' in x.my_field).toDF().count()
Out[33]: 753137

但是当我尝试通过spark-submit运行时,我收到以下错误:

{some_path}/pyspark/serializers.py", line 547, in loads
    s = stream.read(length)
ValueError: read length must be positive or -1