【问题标题】:How to create a udf in PySpark which returns an array of strings?如何在 PySpark 中创建一个返回字符串数组的 udf?
【发布时间】:2018-05-20 20:15:36
【问题描述】:

我有一个 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 Data Frames "assert isinstance(dataType, DataType), "dataType should be DataType" How to return a "Tuple type" in a UDF in PySpark?

但是这些都没有帮助我解决为什么这不起作用。我正在使用 pyspark 1.6.1。

如何在 pyspark 中创建一个返回字符串数组的 udf?

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-sql user-defined-functions


    【解决方案1】:

    你需要初始化一个StringType实例:

    label_udf = udf(my_udf, ArrayType(StringType()))
    #                                           ^^ 
    df.withColumn('subset', label_udf(df.col1)).show()
    +------------+------+
    |        col1|subset|
    +------------+------+
    |     oculunt|[s, n]|
    |predistposed|[s, n]|
    | incredulous|[s, n]|
    +------------+------+
    

    【讨论】:

      猜你喜欢
      • 2020-11-02
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 2021-12-13
      • 1970-01-01
      • 2012-08-30
      • 2016-08-18
      相关资源
      最近更新 更多