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

Scala环境下如何将CSV字符串转换为Spark的org.apache.spark.sql.Row

解决Spark Scala中字符串转Row的问题

嗨,刚接触Spark Scala的话,遇到这种小问题很正常,我来帮你理清楚~

你现在的问题是想把逗号分隔的字符串转成长度为4的org.apache.spark.sql.Row,但之前的几种写法都只生成了长度为1的Row,原因是这些写法都把整个字符串(或者分割后的数组)当成了Row的单个元素:

  • Row.apply(myString) 和 Row(myString):直接把完整的字符串作为Row的唯一一个元素,自然长度是1;
  • Row.fromSeq(Seq(myString.split(','))):split(',')返回的是一个数组,你把这个数组放进了Seq里,相当于Seq里只有一个元素(就是那个数组),所以Row的长度还是1。

正确的做法

首先得把字符串分割成独立的元素,还要处理掉每个元素的前导空格(因为你的字符串里是"apple, boy, cat, dog",分割后每个元素比如" boy"带空格),然后再把这些元素逐个放进Row里:

val myString = "apple, boy, cat, dog"
// 1. 分割字符串并去除每个元素的空格
val cleanElements = myString.split(',').map(_.trim)
// 2. 方法一:用Row.fromSeq,把数组转成Seq传入
val row1 = org.apache.spark.sql.Row.fromSeq(cleanElements.toSeq)
// 3. 方法二:用Row的apply方法,把数组展开为可变参数
val row2 = org.apache.spark.sql.Row(cleanElements: _*)

现在你再看row1.length或者row2.length,结果就是4了,每个元素都是独立的Row字段~

内容的提问来源于stack exchange,提问作者D V N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:28:17