相关疑难解决方法(0)

Spark UDF与varargs

如文档中所示,它是列出最多22个所有参数的唯一选项吗?

https://spark.apache.org/docs/1.5.0/api/scala/index.html#org.apache.spark.sql.UDFRegistration

有人想出如何做类似的事情吗?

sc.udf.register("func", (s: String*) => s......
Run Code Online (Sandbox Code Playgroud)

(编写跳过空值的自定义concat函数,当时只有2个参数)

谢谢

scala apache-spark udf

18
推荐指数
1
解决办法
1万
查看次数

如何在 Java 中创建一个接受字符串数组的 Spark UDF?

这个问题已在此处针对 Scala提出,我使用 Java API 时它对我没有帮助。我真的把所有东西和厨房水槽都扔了,所以这是我的方法:

List<String> sourceClasses = new ArrayList<String>();
//Add elements
List<String> targetClasses = new ArrayList<String>();
//Add elements

dataset = dataset.withColumn("Transformer", callUDF(
    "Transformer",
    lit((String[])sourceClasses.toArray())
        .cast(DataTypes.createArrayType(DataTypes.StringType)),
    lit((String[])targetClasses.toArray())
        .cast(DataTypes.createArrayType(DataTypes.StringType))
));
Run Code Online (Sandbox Code Playgroud)

对于我的 UDF 声明:

public class Transformer implements UDF2<Seq<String>, Seq<String>, String> {


//  @SuppressWarnings("deprecation")
public String call(Seq<String> sourceClasses, Seq<String> targetClasses)
    throws Exception {
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,执行不会通过 UDF 调用,这是意料之中的,因为我无法匹配类型。请在这方面帮助我。

编辑

我尝试了@Oli 建议的解决方案。但是,我得到以下异常:

org.apache.spark.SparkException: Failed to execute user defined function($anonfun$261: (array<string>, array<string>) => string)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.project_doConsume_0$(Unknown Source)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43) …
Run Code Online (Sandbox Code Playgroud)

java apache-spark

1
推荐指数
1
解决办法
1244
查看次数

标签 统计

apache-spark ×2

java ×1

scala ×1

udf ×1