2017-07-31 114 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

有趣......这是正确的!谢谢 :) –