2017-07-31 70 views
1

語境火花數據集和方差

我已經創建了一個函數,它接受一個Dataset[MyCaseClass],並返回它的列中的一個的元件的陣列

def columnToArray(ds: Dataset[MyCaseClass], columnName: String): Array[String] = { 
    ds 
    .select(columnName) 
    .rdd 
    .map(row => row(0).toString) 
    .collect 
} 

它正常工作與案例類

case class MyCaseClass(
    fieldA: String, 
    fieldB: String, 
    fieldC: String 
) 

問題

我需要重用某種其他類型的Dataset的功能。在試圖概括,我宣佈Dataset的類型AnyRef但是當我與上述情況類我收到以下錯誤

類型不匹配使用;找到:org.apache.spark.sql.Dataset [com.my.package.MyCaseClass] required:org.apache.spark.sql.Dataset [AnyRef]注意:com.my.package.MyCaseClass <:AnyRef,但類Dataset在類型T中是不變的。您可能希望將T定義爲+ T。 (SLS 4.5)

我想在錯誤提到類型TDataset類型,所以我不能改變它的方差。有什麼其他方式可以概括這個功能嗎?

回答

1

對於這個特殊的功能確切類型Dataset的無所謂,所以我乾脆:

def columnToArray(ds: Dataset[_], columnName: String): Array[String] = { 
ds 
    .select(columnName) 
    .rdd 
    .map(row => row(0).toString) 
    .collect 
} 
+0

有趣......這是正確的!謝謝 :) –