首页 > 解决方案 > 将用 SCALA 编写的 Spark UDF 转换为 JAVA

问题描述

下面是我的 spark UD,有人可以帮我把它转换成 java 吗?

val customUDF = udf((array: Seq[String]) => {
    val newts = array.filter(_.nonEmpty)
    if  (newts.size == 0) null
    else newts.head
})

标签: scalaapache-spark

解决方案


你可以通过两种方式做到这一点

  1. 内联使用 Lambda 即 Scala 风格
  2. 或者你可以定义一个方法并注册它。
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.api.java.UDF0;
import org.apache.spark.sql.api.java.UDF1;
import org.apache.spark.sql.types.DataTypes;

import java.util.List;

public class SimpleUDF {

    public static void main(String[] args) {

        SparkSession spark = SparkSession.builder().master("local[*]").getOrCreate();
        spark.sqlContext()
                .udf()
                .register("sampleUDFLambda", (List<String> array) -> array.stream().filter(element ->
                        !element.isEmpty()).findFirst().orElse(null), DataTypes.StringType);

    }

    //Or you can define a function 

    private UDF1< List<String>,String> sampleUdf()
    {
        return ( array ) -> array.stream().filter(element ->
                !element.isEmpty()).findFirst().orElse(null);
    }




}


推荐阅读