Tengo una udf que devuelve una lista de cadenas. esto no debería ser demasiado difícil. Yo pase en el tipo de datos al ejecutar el archivo udf, ya que devuelve una matriz de cadenas: ArrayType(StringType).

Ahora, de alguna manera, esto no es trabajo:

el dataframe estoy operativo es df_subsets_concat y se parece a esto:

df_subsets_concat.show(3,False)
+----------------------+
|col1                  |
+----------------------+
|oculunt               |
|predistposed          |
|incredulous           |
+----------------------+
only showing top 3 rows

y el código es

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))

y el resultado es

/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

Es mi entendimiento de que esta era la manera correcta de hacerlo. Aquí están algunos recursos:
pySpark de los Marcos de Datos «afirman isinstance(tipo de datos, Tipo de datos), «tipo de datos debe ser de Tipo de datos»
Cómo devolver un «Tupla tipo» en una UDF en PySpark?

Pero ninguno de ellos me han ayudado a resolver por qué esto no está funcionando. estoy usando pyspark 1.6.1.

Cómo crear un archivo udf en pyspark que devuelve una matriz de cadenas?

InformationsquelleAutor Hunle | 2017-12-06

1 Comentario

  1. 22

    Usted necesita para inicializar un StringType ejemplo:

    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]|
    +------------+------+

Dejar respuesta

Please enter your comment!
Please enter your name here