我有一个带有数据的固定宽度的文本文件(样本)
2107abc2018abn2019gfh
所有行数据都合并为单行 我需要读取文本文件并根据固定的行长= 7分割数据 并生成多行并将其存储在RDD中。
2107abc
2018abn
2019gfh
其中2107
是一列,abc
是另外一列
该逻辑是否适用于1 GB或更大的大型数据文件?
答案 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|
//+----+----+