当前位置: 首页 > 知识库问答 >
问题:

udf spark Scala返回案例类

韩征
2023-03-14
import org.apache.spark.sql.functions._

case class oneClass(a : Int , b: String , c :string)

val doSomthing = udf ((t1 : Seq[String], str : String , values : t2 Seq[String])
    => {
    val pos = t1.indexOf(str)
    if (pos >= 0) oneClass(pos, str,t2(pos))
    //if no control of pos possible return -1 ===> indexoutofboundsexception
    //if control the udf return Any then when I use it ===> Exception
    }
)

如何只在pos时返回case类

共有1个答案

牛景同
2023-03-14

如果不应该发生,则抛出异常(火花作业将失败):

val doSomthing = udf ((t1 : Seq[String], str : String , t2 :Seq[String])=> {
  val pos = t1.indexOf(str)
  if (pos >= 0) oneClass(pos, str,t2(pos)) else {
    throw new IllegalArgumentException
  }
})

否则,请使用<code>选项:

val doSomthing = udf ((t1 : Seq[String], str : String , t2 :Seq[String])=> {
  val pos = t1.indexOf(str)
  if (pos >= 0) Some(oneClass(pos, str,t2(pos))) else None
})

在后一种情况下,您的结果将在DataFrame中为null翻译为null

一种模式,如果没有抛出异常,也可以使用它来返回结果:

val doSomthing = udf ((t1 : Seq[String], str : String , t2 :Seq[String])=> {
  scala.util.Try{
  val pos = t1.indexOf(str)
  oneClass(pos, str,t2(pos))
  }.toOption
})

这可能是有用的测试但我不认为这是良好的做法

 类似资料:
  • 问题内容: 例如,这样简单的事情: 打印110.00000000000001而不是110。使用其他数字代替100 * 1.1还会给出很多数字,并且末尾有一些随机数字,这是不正确的。 有任何想法吗? 问题答案: 浮点符号的准确性有限。这是一个指南:http : //floating-point- gui.de/

  • 问题内容: 以下脚本应返回部门的名称以及这些部门中的雇员人数,市场营销,执行和销售部门的雇员为‘0’,但返回的值为‘1’,而不是‘0’。我该如何纠正? 问题答案: 不要使用数数您想数数的员工。 计算整行。由于在进行计数(*)时,部门中每个部门始终至少会有一个记录,因此您总是会获得至少1条记录 演示

  • 本文向大家介绍sklearn+python:线性回归案例,包括了sklearn+python:线性回归案例的使用技巧和注意事项,需要的朋友参考一下 使用一阶线性方程预测波士顿房价 载入的数据是随sklearn一起发布的,来自boston 1993年之前收集的506个房屋的数据和价格。load_boston()用于载入数据。 输出内容为: 可以看到测试集上准确率并不高,应该是欠拟合。 使用多项式做线

  • 我的接口定义为: 然而,这还不够明确,因为我不知道返回的是什么字段。我想要像这样的东西: 但是这会引发NameError,因为还没有定义结果类。是否有任何方法可以指定函数的返回类型(以便内部成员可以通过点运算符访问),而无需为每个函数显式创建结果类? EDIT我没有在他们自己的模块中进行定义,因为我认为会有太多名字尴尬冗长的模块。定义一个内部类会更好,因为它不会每次都强制创建一个新的类名,而且,因

  • 问题内容: 我正在尝试进行此扩展: 但是我得到了编译错误: 错误:无法将类型’UIViewController’的返回表达式转换为类型’Self’ 可能吗?我也想做到 问题答案: 与在Swift的类扩展函数中使用’self’类似,您可以定义一个通用的辅助方法,该方法可以从调用上下文中推断出self的类型: 然后 进行编译,并将类型推断为。 Swift 3 更新 : 另一种可能的解决方案,使用:

  • 本文向大家介绍PowerShell函数一次返回多个返回值示例,包括了PowerShell函数一次返回多个返回值示例的使用技巧和注意事项,需要的朋友参考一下 本文介绍在自定义PowerShell函数时,如何让函数返回值,如何接收返回值,如何让不相干的内容不放到返回值数组中。 PowerShell函数体中的任何输出,一般来说,都会以返回值的形式返回给函数调用者。多个输出的内容是放到一个返回值数组中的。