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
相关产品推荐
相关产品推荐

