Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 是否可以将选件与spark UDF一起使用_Scala_Apache Spark - Fatal编程技术网

Scala 是否可以将选件与spark UDF一起使用

Scala 是否可以将选件与spark UDF一起使用,scala,apache-spark,Scala,Apache Spark,我想使用Option作为函数的输入类型 udfoa:选项[String],ob:选项[String]=>… 以更有效的方式处理空值 有没有办法做到这一点?据我所知,这是不可能的。没有任何东西可以阻止您使用选项包装参数: 使用数据集编码器: val df = Seq(("a", None), ("b", Some("foo"))).toDF("oa", "ob") df.as[(Option[String], Option[String])] 或者添加一些隐式转换: implicit def

我想使用Option作为函数的输入类型

udfoa:选项[String],ob:选项[String]=>…

以更有效的方式处理空值


有没有办法做到这一点?据我所知,这是不可能的。没有任何东西可以阻止您使用选项包装参数:

使用数据集编码器:

val df = Seq(("a", None), ("b", Some("foo"))).toDF("oa", "ob")

df.as[(Option[String], Option[String])]
或者添加一些隐式转换:

implicit def asOption[T](value: T) : Option[T] = Option(value)

def foo(oa: Option[String], ob: Option[String]) = {
  oa.flatMap(a => ob.map(b => s"$a - $b"))
}

def wrap[T, U, V](f: (Option[T], Option[U]) => V) = 
  (t: T, u: U) => f(Option(t), Option(u))

val foo_ = udf(wrap(foo))
df.select(foo_($"oa", $"ob"))
implicit def asOption[T](value: T) : Option[T] = Option(value)

def foo(oa: Option[String], ob: Option[String]) = {
  oa.flatMap(a => ob.map(b => s"$a - $b"))
}

def wrap[T, U, V](f: (Option[T], Option[U]) => V) = 
  (t: T, u: U) => f(Option(t), Option(u))

val foo_ = udf(wrap(foo))
df.select(foo_($"oa", $"ob"))