2016-10-08 31 views
0

我正在嘗試將一個json讀入一個數據幀,然後寫入一個數據集。 我正面臨以下問題。有人能夠快速幫助我嗎?創建火花數據集時發生問題

有一個PrintDF數據框已成功創建,下方是模式。

scala> personDF.printSchema(); 
root 
|-- personDF: struct (nullable = true) 
| |-- city: string (nullable = true) 
| |-- line1: string (nullable = true) 
| |-- postalCode: string (nullable = true) 
| |-- state: string (nullable = true) 
| |-- type1: string (nullable = true) 

我創建了一個case類來捕獲上面的DF。

scala> case class address1(city:String,line1:String,postalCode:String,state:String,type1:String) 
defined class address1 

下面是personDF具有目前

scala> personzDF.show() 

+--------------------+ 
|   personDF| 
+--------------------+ 
|[CENTERPORT,5 PRO...| 
|[HUNTINGTON,94 JA...| 
|[RIVERHEAD,9 PATT...| 
|[NORTHPORT,50 LIS...| 
|[NORTHPORT,24 LAU...| 
|[NORTHPORT,340 SC...| 
|[GREENLAWN,166 BR...| 
|[MELVILLE,1 MERID...| 
+--------------------+ 

最後當我創建的數據集,我得到下面的錯誤的數據。

scala> val ds = personDF.as[address1] 
<console>:32: error: overloaded method value as with alternatives: 
    (alias: Symbol)org.apache.spark.sql.DataFrame <and> 
    (alias: String)org.apache.spark.sql.DataFrame 
does not take type parameters 
     val ds = personDF.as[address1] 

我沒有谷歌搜索,找不到原因。

感謝, Sivaram

回答

0

其實personDF是structType personDF的數組,但它不是在的結構是什麼您從printSchema()預計:

| - personDF:結構( nullable = true)

你試圖將personzDF轉換爲address1類型嗎?然後嘗試像這樣:

val ds = personzDF.map(rec => rec.split(",")) 
    .map(rec => address1(rec(0), rec(1), rec(2), rec(3), rec(4))) 
    .toDF() 

希望它有幫助。

+0

這是有效的。謝謝!! –