我有一个带有“备注”列的数据框,其中包含文本。我想通过检查备注列的长度来添加新列。例如,如果备注列的长度== 2,我需要使用split($“ remarks”,“”)(1)。否则,我将按“备注”栏原样。
ex:备注=“ xxxx yyyy”,我期望count应该为2,如果是这种情况,我需要将yyyy作为我们要添加的新列的值。
这是我尝试过但未获得预期结果的代码。
val df1 = df.withColumn("remarks1",when(length(split(col($"remarks")," ") === 2),col($"remarks").split(" ")(1)).otherwise(col($"remarks")))
使用上面的代码,我得到了错误:
线程“主”中的异常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))然后分割(备注#33,)[1] ELSE cefversion#33 END AS备注1#107]
任何人都可以帮助我如何实现这一目标。
谢谢,宝贝
答案 0 :(得分:0)
我可以缩小范围,这是正确的方法:
val df1 = df.withColumn("remarks1", when(size(split($"remarks" ," ")) === 2,split($"remarks"," ")(1)).otherwise(col("remarks")))