我有以下自定义项用于将存储为字符串的时间转换为时间戳。
val hmsToTimeStampUdf = udf((dt: String) => {
if (dt == null) null else {
val formatter = DateTimeFormat.forPattern("HH:mm:ss")
try {
new Timestamp(formatter.parseDateTime(dt).getMillis)
} catch {
case t: Throwable => throw new RuntimeException("hmsToTimeStampUdf,dt="+dt, t)
}
}
})
此自定义项用于转换 String
价值观 Timestamp
:
outputDf.withColumn(schemaColumn.name, ymdToTimeStampUdf(col(schemaColumn.name))
但某些csv文件对此列的值无效 RuntimeException
. 我想找出哪些行有这些坏记录。是否可以访问自定义项中的行信息?
2条答案
按热度按时间6tdlim6h1#
而不是扔
RuntimeException
这会扼杀你的.csv解析,也许更好的方法是让udf返回一个元组(格式良好,损坏的)值。然后,您可以通过选择is null
/is not null
子集。nukf8bse2#
您可以将该行作为第二个输入参数添加到自定义项中:
在调用udf时,使用一个结构,将dataframe的所有列作为第二个参数(由于这个答案):