开发者社区> 问答> 正文

根据spark scala中数据框中的列拆分获取长度

有一个包含文本的“备注”列的数据框。我想通过检查备注列长度来添加新列。例如,如果备注列的长度== 2,我需要拆分($“备注”,“”)(1)。否则我会把备注栏视为原样。

例如:remarks =“xxxx yyyy”,我希望count应该是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:remarks由于数据类型不匹配,无法解析'(split(,'')= 2)':'(split(remarks,'')= 2)中的不同类型'(array和int)。;; '项目[备注#33,dv#37,dp#42,dv1#48,sig#55,en#63,es#72,案例时长度((拆分(备注#33,)= 2))然后拆分(备注#33,)[1] ELSE cefversion#33 END AS备注1#107]

展开
收起
社区小助手 2018-12-06 11:59:49 2944 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    缩小问题的范围,这是正确的方法:

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

    2019-07-17 23:18:30
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Time Series Analytics with Spark 立即下载
Just Enough Scala for Spark 立即下载
JDK8新特性与生产-for“华东地区scala爱好者聚会” 立即下载