2016-03-08 67 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

相關問題