【发布时间】:2018-11-27 07:46:09
【问题描述】:
我有一个包含文本的“备注”列的数据框。我想通过检查备注列长度来添加新列。例如,如果备注列的长度== 2,我需要使用split($"remarks", "")(1)。否则,我将按原样保留备注栏。
ex:remarks = "xxxx yyyy",我希望计数应该是 2,如果是这种情况,我需要将 yyyy 作为我们正在添加的新列中的值。
这是我尝试过但没有得到预期结果的代码。
val df1 = df.withColumn("remarks1",when(length(split(col($"remarks")," ") === 2),col($"remarks").split(" ")(1)).otherwise(col($"remarks")))
使用上面的代码,我得到了错误:
线程 "main" org.apache.spark.sql.AnalysisException 中的异常:由于数据类型不匹配,无法解析 '(split(remarks, '') = 2)':'( split(remarks, ' ') = 2)' (数组和整数).;; '项目 [remarks#33, dv#37, dp#42, dv1#48, sig#55, en#63, es#72, CASE WHEN length((split(remarks#33, ) = 2)) THEN split(备注#33, )[1] ELSE cefversion#33 结束为备注1#107]
任何人都可以帮助我如何实现这一目标。
谢谢,宝贝
【问题讨论】:
-
错字。它应该是
when(length(split(col($"remarks")," ") === 2)- 注意===,而不是==。 -
嗨 user10465355 ,当我添加 === 时,我得到了不同的错误。请参阅更新的问题。感谢您的快速回复。
-
还有至少一个放错位置的括号,以及两个对
col的错误调用(参数应该是字符串。 -
你能举个例子吗