我有一个返回字符串列表的 udf。这应该不会太难。我在执行 udf 时传入数据类型,因为它返回一个字符串数组:ArrayType(StringType)
.
现在,不知怎的,这不起作用:
我正在操作的数据框是df_subsets_concat
看起来像这样:
df_subsets_concat.show(3,False)
+----------------------+
|col1 |
+----------------------+
|oculunt |
|predistposed |
|incredulous |
+----------------------+
only showing top 3 rows
代码是
from pyspark.sql.types import ArrayType, FloatType, StringType
my_udf = lambda domain: ['s','n']
label_udf = udf(my_udf, ArrayType(StringType))
df_subsets_concat_with_md = df_subsets_concat.withColumn('subset', label_udf(df_subsets_concat.col1))
结果是
/usr/lib/spark/python/pyspark/sql/types.py in __init__(self, elementType, containsNull)
288 False
289 """
--> 290 assert isinstance(elementType, DataType), "elementType should be DataType"
291 self.elementType = elementType
292 self.containsNull = containsNull
AssertionError: elementType should be DataType
据我了解,这是执行此操作的正确方法。以下是一些资源:pySpark 数据框“assert isinstance(dataType, DataType),”dataType 应该是 DataType” https://stackoverflow.com/questions/30105258/pyspark-data-frames-assert-isinstancedatatype-datatype-datatype-should-be
如何在 PySpark 的 UDF 中返回“元组类型”? https://stackoverflow.com/questions/36840563/how-to-return-a-tuple-type-in-a-udf-in-pyspark
但这些都没有帮助我解决为什么这不起作用。我正在使用 pyspark 1.6.1。
如何在 pyspark 中创建返回字符串数组的 udf?