根据Spark Scala中的数据帧中的列拆分获取长度

时间:2018-11-26 18:20:37

标签: apache-spark dataframe

我有一个带有“备注”列的数据框,其中包含文本。我想通过检查备注列的长度来添加新列。例如,如果备注列的长度== 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]

任何人都可以帮助我如何实现这一目标。

谢谢,宝贝

1 个答案:

答案 0 :(得分:0)

我可以缩小范围,这是正确的方法:

val df1 = df.withColumn("remarks1", when(size(split($"remarks" ," ")) === 2,split($"remarks"," ")(1)).otherwise(col("remarks")))