【发布时间】:2020-03-11 06:11:29
【问题描述】:
我正在尝试创建一个 udf 以将两个字符串作为参数;一个采用 DD-MM-YYYY 格式(例如“14-10-2019”),另一个采用浮点格式(例如“0.000”)。我想将类似浮点的字符串转换为 int 并将其添加到日期对象以获取另一个我想作为字符串返回的日期。
def getEndDate = udf{ (startDate: String, no_of_days : String) =>
val num_days = no_of_days.trim.toInt //Converts the String value to Integer
val date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").parse(startDate) //Parses the string date to timestamp
calObj.setTime(date) //Sets the calendar object instance
calObj.add(Calendar.DAY_OF_MONTH, num_days) //Adds the number of days to the start date
val endDate = calObj.getTime().toString //Gets end date in string format
endDate
}
尝试运行时,我收到以下错误:
原因:java.lang.NumberFormatException:对于输入字符串:“0.000”
【问题讨论】:
-
尝试调试它。抛出异常时
startDate和no_of_days的值是多少? -
它会在行本身上引发错误。开始日期 = 14-10-2019T00:00:00。 no_of_days = "0.000"
-
这不是我问的——看看实际值。
"引号是否可能是no_of_days值的一部分?您需要先去掉引号。 -
不,引号不是值的一部分。我还检查了前导/尾随空格。数据似乎很干净。
-
请显示完整的堆栈跟踪,异常究竟发生在哪里?单独对您的功能进行单元测试,它是否适用于您提到的输入。如果是这样,您可能没有得到您认为的输入。
标签: java scala apache-spark-sql numberformatexception