私が見たことから、これを行うにはあなたがしなければならない
udf
を単純な関数にするsQLの関数をSQLContext
に登録する
spark.sqlContext.udf.register("myUDF", myFunc)
これをUserDefinedFunction
のDataFrame
に変換します
def myUDF = udf(myFunc)
これを1つのステップに組み合わせて、udf
を両方で使用できるようにする方法はありませんか?また、関数がDataFrame
には存在するがSQLには存在しない場合、コードを再度コピーせずに関数を登録するにはどうすればよいですか?
UDFRegistration.register
バリアント、scala.FunctionN
、UserDefinedFunction
を返すので、SQL関数を登録してDSL対応のUDFを1つのステップで作成できます。
val timesTwoUDF = spark.udf.register("timesTwo", (x: Int) => x * 2)
spark.sql("SELECT timesTwo(1)").show
+---------------+
|UDF:timesTwo(1)|
+---------------+
| 2|
+---------------+
spark.range(1, 2).toDF("x").select(timesTwoUDF($"x")).show
+------+
|UDF(x)|
+------+
| 2|
+------+
以下を使用して、それをデータフレームに適用することができます
spark.sqlContext.udf.register("myUDF", myFunc)
データフレーム変換で呼び出す場合は、selectExprを使用します。
df.selectExpr("myUDF(col1) as modified_col1")
Spark2の更新-
spark.udf.register( "func_name"、func_name)
引数1-スパークに登録される関数名
引数2-Python/scalaでの作成中に定義される関数名
関数を同じ名前でSparkに登録することをお勧めします。