我想要实现的是在考虑到每一行的值的情况下,将值推断为某些DataFrame列。
.withColumn("date", when(col("date").isNull, lit(new DateTime(col("timestamp").as[Long]).getYear)))
问题是我无法集中精力为每个Row对象检索给定列的值。我看过其他解决方案,但是它们要么列出所有行的整个值集,要么只是获得它们的第一个值,这不是我想要达到的目的。
像这样的示例DF图像...
(year, val1, val2, val3, timestamp) (null, 10, 12, null, 123456789) (null, 11, 12, null, 234567897)
在将各个函数(例如,从时间戳中提取年份)应用到每个行之后,我想看到的是...
(year, val1, val2, val3, timestamp) (2018 [using DateTime class], 10, 12, 1012, 123456789) (2018 [using DateTime class], 12, 12, 1212, 234567897)
有什么办法吗?
答案 0 :(得分:1)
这是 UDF 发挥作用的地方:
val udf_extractYear = udf((ts:Long) => new DateTime(ts).getYear)
然后您可以使用例如
df
.withColumn("year", when(col("year").isNull, udf_extractYear(col("timestamp"))).otherwise(col("year")))
.show()
如您所见,您的timestamp
列已自动映射到Long