Stringbuilder到RDD

时间:2018-06-02 04:53:16

标签: scala

我在Scala IDE中有一个字符串构建器(sb),其数据如下所示

CellId,Date,Time,MeasType,MeasResult

251498240,2016-12-02,20:45:00,RRC.ConnEstabAtt.emergency,0

251498240,2016-12-02,20:45:00,RRC.ConnEstabAtt.highPriorityAccess,0

251498240,2016-12-02,20:45:00,RRC.ConnEstabAtt.mt-Access,4

现在我想使用RDD将此字符串转换为scala。请帮帮我。

我正在使用此代码。但没有运气。提前致谢

 val headerFile = sc.parallelize(sb)
 headerFile.collect()

1 个答案:

答案 0 :(得分:0)

StringBuilder 用于从可变字符序列构建字符串 。因此,您添加到构建器的内容将被附加到一个字符串。

您需要分隔添加的字符串,以用作sparkcontext中的字符串列表

假设字符串添加了尾随换行符,您可以使用换行符拆分字符串构建器并将其转换为rdd

val headerFile = sc.parallelize(sb.toString.split("\n"))
headerFile.collect()

要显示数据,您必须打印它们或将它们保存到文件

现在,如果要在保存之前转换为数据帧,则可以执行以下操作

val data = sb.toString.split("\n")
import org.apache.spark.sql.types._
val schema = StructType(data.head.split(",").map(StructField(_, StringType, true)))
val rdd = sc.parallelize(sb.toString.split("\n").tail.map(line => Row.fromSeq(line.split(","))))
spark.createDataFrame(rdd, schema).show(false)

应该给你

+---------+----------+--------+-----------------------------------+----------+
|CellId   |Date      |Time    |MeasType                           |MeasResult|
+---------+----------+--------+-----------------------------------+----------+
|251498240|2016-12-02|20:45:00|RRC.ConnEstabAtt.emergency         |0         |
|251498240|2016-12-02|20:45:00|RRC.ConnEstabAtt.highPriorityAccess|0         |
|251498240|2016-12-02|20:45:00|RRC.ConnEstabAtt.mt-Access         |4         |
+---------+----------+--------+-----------------------------------+----------+