【问题标题】:Get the length based on the column split in a dataframe in spark scala根据 spark scala 中数据框中的列拆分获取长度
【发布时间】: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的错误调用(参数应该是字符串。
  • 你能举个例子吗

标签: apache-spark dataframe


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 2022-01-26
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多