You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark Scala ETL:如何筛选按空格分割后长度为4的DataFrame行?

解决Spark Scala中筛选分割后数组长度为4的DataFrame行问题

嗨,我来帮你搞定这个问题!你踩的坑其实挺常见——Spark的Column对象和普通Scala集合(比如Array)不一样,不能直接调用原生的.length方法,得用Spark SQL专门提供的内置函数来处理数组类型的列。

正确的解决方案

Spark SQL提供了size()函数,专门用来获取数组类型列的元素个数,这正是你需要的工具。

方法1:使用size()函数(推荐)

先导入对应的函数,然后在where条件里用它判断分割后的数组长度:

import org.apache.spark.sql.functions.size

// 筛选item列按空白符分割后有4个元素的行
df.where(size(split(df("item"), "\\s+")) == 4).show()

方法2:SQL表达式风格写法

如果你更习惯SQL语法,也可以用expr()函数直接写SQL式的条件:

import org.apache.spark.sql.functions.expr

df.where(expr("size(split(item, '\\\\s+')) = 4")).show()

这里注意转义字符的处理:Scala字符串里要表示SQL中的\s+,需要写成\\\\s+。

额外优化建议

如果你的item列可能存在null或者空字符串,建议先过滤掉这些情况,避免split后得到空数组干扰结果:

import org.apache.spark.sql.functions.size

df.filter(df("item").isNotNull && df("item") =!= "")
  .where(size(split(df("item"), "\\s+")) == 4)
  .show()

内容的提问来源于stack exchange,提问作者Jason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:18:16