webentwicklung-frage-antwort-db.com.de

Wie erstelle ich ein udf in PySpark, das ein Array von Strings zurückgibt?

Ich habe ein udf, das eine Liste von Zeichenfolgen zurückgibt. das sollte nicht zu schwer sein. Ich übergebe den Datentyp bei der Ausführung von udf, da er ein Array von Zeichenfolgen zurückgibt: ArrayType(StringType).

Nun, irgendwie funktioniert das nicht:

der Datenrahmen, auf dem ich arbeite, ist df_subsets_concat und sieht so aus:

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

und der Code ist

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

und das Ergebnis ist

/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

Nach meinem Verständnis war dies der richtige Weg, dies zu tun. Hier sind einige Ressourcen: pySpark-Datenrahmen "behaupten, dass es sich um eine Instanz (Datentyp, Datentyp) handelt", "Datentyp sollte Datentyp sein"Wie wird ein "Tupeltyp" in einer UDF in PySpark zurückgegeben? =

Aber keiner von beiden hat mir geholfen, den Grund dafür zu klären. Ich benutze Pyspark 1.6.1.

Wie erstelle ich ein udf in pyspark, das ein Array von Strings zurückgibt?

11
Hunle

Sie müssen eine StringType -Instanz initialisieren:

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