【发布时间】:2019-11-22 11:15:37
【问题描述】:
我有一个 Seq[Column] 可以从数据框中进行选择。某些列可以是 udfs,因此可能有一列选择字符串列并尝试将其转换为双精度列。有时此列可能为空。
是否可以捕获抛出异常的记录,返回可以正确处理的记录数据帧,而不是终止整个数据帧的处理。 目前我有以下代码,如果单行的价格为空,则整个操作将失败。我希望它处理所有其他行
def stringToLong(s: String): BigDecimal = s.toLong
def stringToBigLongUdf: UserDefinedFunction = udf(stringToLong _)
df.select(stringToLongUdf(new Column("price")))
【问题讨论】:
-
您的代码无法编译。另外,我不完全理解您所说的“没有列的记录”是什么意思。数据框是表,所有记录对所有列都有值(即使它是 None 或 null)。您能否提供更多详细信息。也许是一些示例数据和预期输出?
-
这样更好吗?
-
您能否提供这样一个 UDF 列的示例以及它引发的错误?类型转换通常会传递空值,也可以编写 UDF 来优雅地处理它们。
-
不是更好。如果您可以提供问题的最小实例以及代码和数据,这将非常有帮助,以便我们可以重现它并更好地了解您正在尝试做什么。它甚至可以帮助您自己找到解决方案。顺便说一句,您的代码仍然无法编译。
-
试试
select(columns :_*);-)
标签: apache-spark