2017-05-23 21 views
0

當我試圖得到一些價值在DataFrame,如:如何使用正確的DataType獲取DataFrame中的值?

df.select("date").head().get(0) // type: Any 

結果類型爲Any,這是不預期。 由於dataframe包含數據的schema,它應該知道每個columnDataType,所以當我嘗試使用get(0)獲得值時,它應該返回具有正確類型的值。但是,它沒有。

取而代之,我需要使用getDate(0)指定哪個DataType,這似乎很奇怪,不方便,並且讓我發瘋。

當我指定的schema用正確的DataTypes每個column當我創建的Dataframe,我不希望使用不同的getXXX()' for different column`s。

有沒有一些方便的方法可以用他們自己的正確類型獲取值?也就是說,如何獲得schema中指定的正確DataType的值?
謝謝!

回答

0

Scala是一種靜態類型語言。因此行上定義的get方法只能返回單個類型的值,因爲get方法的返回類型爲Any。一個呼叫不能返回Int,另一個呼叫不能返回String

您應該調用getInt,getDate和其他每種類型的get方法。或者您可以將類型作爲參數傳遞給getAsmethod(例如row.getAs[Int](0))。

正如在評論中提到的其他選項

  • 使用數據集,而不是一個數據幀。
  • 使用星火SQL
+0

是的,我知道。問題是,如果我有很多列,我不想調用不同的函數來獲取不同列的值。到目前爲止,據我所知,一種解決方案是使用'case class'將數據框轉換爲數據集。但另一個問題是,由於我的輸入數據集不同,我不能爲每個數據集硬編碼一個「case class」。所以我現在很困惑。 – PC9527

+0

使用數據集不是一個壞主意..除了數據集和數據框選項,我們可以做的不多。 –

+0

'case class'是將DataFrame轉換爲DataSet的唯一方式嗎?如果我有一個列類型的數組,我怎樣才能使用數組進行轉換? – PC9527

0

可以調用getAs方法getAs[Int]()getAs[String]()或使用特定的方法,如getInt()getString()

相關問題