如何使用Spark转换大型文本文件以加载到关系模式中?

时间:2016-03-08 22:45:18

标签: scala apache-spark

我正在处理一个大型数据集,该数据集按键构成:以下形式的值对。每个新行都分隔一条记录,数据集包含一个键:每行的值对。

cat_1/key_1: a value
cat_1/key_2: a value
cat_2/key_3: a value

cat_1/key_1: another value
cat_2/key_3: another value

我的目标是将此文本文件转换为数据框,其记录可以很容易地保存在表格中。

在另一个编程范例中,我可能会迭代文件并在遇到换行符时将记录写入另一个数据结构。但是,我正在寻找一种更为惯用的方法来实现Spark。

在Spark创建一个新的RDD并将每行映射到\n之后处理作为记录分隔符的最佳方法时,我陷入困境。

1 个答案:

答案 0 :(得分:-1)

Spark每行创建一个新元素。所以我不确定换行的问题是什么,但你可以做一些事情,比如将数据映射到案例类。 case类定义表的模式。挺直的。以下基本上是documentation的重写。

case class Data(key: String, value: String)

// Read in data from file
val data = sc.textFile(file://C:/location/of/my/data.txt) 

// Maps comma delimited pairs to caseclass and creates the RDD
val myData = data.map(_.split("\\,",-1)).map(p => Data(p(0), p(1))) 

// To dataframe
val myDataAsDataFrame = myData.toDF()

// Register the table
myDataAsDataFrame.registerTempTable("tableName")