Geo*_*ler 6 generics scala apache-spark
我想有一个功能,可以根据其数据类型动态选择spark Dataframe列。
到目前为止,我已经创建了:
object StructTypeHelpers {
def selectColumnsByType[T <: DataType](schem: StructType):Seq[String] = {
schem.filter(_.dataType.isInstanceOf[T]).map(_.name)
}
}
Run Code Online (Sandbox Code Playgroud)
以便a StructTypeHelpers. selectColumnsByType[StringType](df.schema)
应该起作用。但是,编译器警告我:
abstract type T is unchecked since it is eliminated by erasure
Run Code Online (Sandbox Code Playgroud)
尝试使用时:
import scala.reflect.ClassTag
def selectColumnsByType[T <: DataType: ClassTag](schem: StructType):Seq[String]
Run Code Online (Sandbox Code Playgroud)
它失败了
No ClassTag available for T
Run Code Online (Sandbox Code Playgroud)
如何在没有警告的情况下使它正常工作和编译?
想法是仅过滤具有所需类型的列,然后进行选择。
val df = Seq(
(1, 2, "hello")
).toDF("id", "count", "name")
import org.apache.spark.sql.functions.col
def selectByType(colType: DataType, df: DataFrame) = {
val cols = df.schema.toList
.filter(x => x.dataType == colType)
.map(c => col(c.name))
df.select(cols:_*)
}
val res = selectByType(IntegerType, df)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
586 次 |
最近记录: |