Wie die Rückkehr ein "Tupel-Typ" in einer UDF in PySpark?
Alle Datentypen in pyspark.sql.Typen
werden:
__all__ = [
"DataType", "NullType", "StringType", "BinaryType", "BooleanType", "DateType",
"TimestampType", "DecimalType", "DoubleType", "FloatType", "ByteType", "IntegerType",
"LongType", "ShortType", "ArrayType", "MapType", "StructField", "StructType"]
Ich zu schreiben, ein UDF (in pyspark) gibt ein array von Tupeln. Was muss ich geben, das zweite argument ist der Typ des Rückgabewert der udf-Methode? Es würde etwas sein, auf den Linien der ArrayType(TupleType())
...
- Deine Titel-Frage scheint nicht zu passen den Körper. Nicht in der Dokumentation erzählen Sie, wie man einen return-Wert "- container Typ der anderen Art"?
- Ich habe den Titel geändert. Hoffentlich ist es repräsentativ für den Körper jetzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine solche Sache wie eine
TupleType
im Spark. Produkt-Arten sind vertreten, wiestructs
mit Feldern bestimmten Typs. Zum Beispiel, wenn Sie zurückkehren möchten, ein array mit Paaren (integer, string) verwenden Sie schema wie dieses:Beispiel:
[('a1', [('b1', 1), ('b2', 2)]), ('a2', [('b1', 1), ('b2', 2)])]
und deshalb mache ich einen Typ wieArrayType(StructType([StructField("date", StringType(), False), ArrayType(StructType([StructField("hashId", StringType(), False), StructField("TimeSpent-Front", FloatType(), False), StructField("TimeSpent-Back", FloatType(), False)]))]))
gibt 'ArrayType' - Objekt hat kein Attribut 'name'...StructType
erfordert eine Sequenz vonStructFields
daher können Sie nicht verwendenArrayTypes
allein. Sie müssenStructField
welche GeschäfteArrayType
. Auch Wort der Beratung - wenn Sie finden, sich selbst Strukturen zu schaffen, wie dies sollten Sie wohl überdenken Daten-Modell. Tief geschachtelte Strukturen sind schwer zu handhaben, ohne UDFs und Python-UDFs sind weit aus effizienter.Stackoverflow hält lenken mich zu dieser Frage, also ich denke, ich werde einige Infos hier.
Rückkehr einfache Typen von UDF:
Als Ganzzahlen sind nicht genug:
Rückkehr komplexe Datentypen von UDF:
Die übergabe mehrerer Argumente einer UDF:
Den code rein für demo-Zwecke, vor allem der transformation stehen im Spark-code, und würde die Ausbeute wesentlich bessere performance.
Wie @zero323 in den Kommentar oben, UDFs sollten generell vermieden werden, in pyspark; Rückkehr komplexe Typen sollten Sie darüber nachdenken, vereinfachen Sie Ihre Logik.
Für die scala-version anstelle von python.
version 2.4
Die Baum-Struktur sieht wie folgt aus.