2016-03-08 65 views
0

我正在处理作为以下形式的键值对的大型数据集:每个新行分隔记录,数据集包含一个键:每行的值对。如何使用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。

对于在创建新的RDD之后处理\n作为记录分隔符,其中每行都被映射到line.split(": "),我仍被卡在Spark中的最佳方法。

+2

你需要提供你尝试过什么(代码明智)至今,为了让我们的HLEP [斯卡拉解析多条记录]的 –

+0

可能的复制(http://stackoverflow.com/q/34157104/ 1560062) – zero323

回答

-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") 
+0

我的假设是你知道什么是“sc”。 – Jeremy

相关问题