将RDD数据按火花标量分成多行

时间:2018-12-19 06:49:23

标签: scala apache-spark apache-spark-sql

我有一个带有数据的固定宽度的文本文件(样本)

  

2107abc2018abn2019gfh

所有行数据都合并为单行 我需要读取文本文件并根据固定的行长= 7分割数据 并生成多行并将其存储在RDD中。

2107abc

2018abn

2019gfh

其中2107是一列,abc是另外一列

该逻辑是否适用于1 GB或更大的大型数据文件?

1 个答案:

答案 0 :(得分:1)

我很高兴您有RDD[String],并且想从数据中提取这两列。首先,您可以分割长度为7的行,然后再分割为4的行。您将使列分开。下面是相同的代码。

//creating a sample RDD from the given string
val rdd = sc.parallelize(Seq("""2107abc2018abn2019gfh"""))

//Now first split at length 7 then again split at length 4 and create dataframe
val res = rdd.flatMap(_.grouped(7).map(x=>x.grouped(4).toSeq)).map(x=> (x(0),x(1)))

//print the rdd
res.foreach(println)

//output
//(2107,abc)
//(2018,abn)
//(2019,gfh)

如果需要,还可以将RDD转换为数据帧以进行进一步处理。

//convert to DF
val df = res.toDF("col1","col2")

//print the dataframe
df.show
//+----+----+
//|col1|col2|
//+----+----+
//|2107| abc|
//|2018| abn|
//|2019| gfh|
//+----+----+