Spark: How to map Python mit Scala oder Java-User Defined Functions?
Lassen Sie uns sagen zum Beispiel, dass mein team ausgewählt hat Python als Referenz Sprache zu entwickeln, mit Funke. Aber später aus Gründen der Leistung, die wir entwickeln möchten, bestimmte Scala oder Java-spezifische Bibliotheken, um die Karte mit unseren Python-code (etwas, das ähnlich wie Python stubs mit Scala oder Java-skeletons).
Nicht denken Sie, ist es möglich, interface-neue angepasste Python-Methoden mit unter der Haube einige Scala-oder Java-User Defined Functions ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Funke 2.1+
Können Sie
SQLContext.registerJavaFunction
:erfordert eine
name
voll qualifizierte name der Java-Klasse und optionalen Rückgabetyp. Leider für jetzt kann es nur verwendet werden, in SQL-Anweisungen (oder mitexpr
/selectExpr
) und benötigt eine Java -org.apache.spark.sql.api.java.UDF*
:Version hat:
Ich würde nicht so weit gehen zu sagen, dass es unterstützt wird, aber es ist sicherlich möglich. Alle SQL-Funktionen zur Verfügung, die derzeit in PySpark sind einfach nur ein Wrapper für Scala-API.
Vermuten lässt möchte ich wiederverwenden
GroupConcat
UDAF habe ich erstellt als eine Antwort auf SPARK SQL Ersatz für mysql Aggregat-Funktion GROUP_CONCAT und es befindet sich in einem Paketcom.example.udaf
:Es ist viel zu viel führende Unterstriche für meinen Geschmack, aber als Sie kann sehen, es kann getan werden.
Bezug auf:
registerJavaFunction
weiß, wo zu finden, Ihre UDF... Könnten Sie näher auf die Verzeichnis-Struktur hier? Haben Siesbt clean assembly
IhrescalaVersion :=...
(build.sbt
??) undpackage com.example.spark.udfs...
(src/main/scala
??) Dateien aus einem anderen Verzeichnis?anderswo?sbt
?), die versuchen, zuscalaVersion := "2.12.7"
Arbeit mitsparkVersion = "2.3.1"
, aber Scala2.12
+ nur kompatibel mit Spark2.4
+ (oder so entnehme ich)