Ian*_*Ian 4 scala apache-spark
DataFrame
我试图将 a (称为:)的单列的不同值df
放入与该列的数据类型匹配的数组中。这是我尝试过的,但它不起作用:
def distinctValues[T: ClassTag](column: String): Array[T] = {
df.select(df(column)).distinct.map {
case Row(s: T) => s
}.collect
}
Run Code Online (Sandbox Code Playgroud)
该方法位于隐式类内部,因此调用df.distinctValues("some_col")
给了我:
scala.MatchError: [ABCD] (of class org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema)
Run Code Online (Sandbox Code Playgroud)
有没有一种优雅的方式来实现我想要的,而且类型安全?
我使用的是 Spark 1.4.1。
问题是您使用的是模式匹配而不是getAs
方法:
implicit final class DataFrameOps(val df: DataFrame) {
def distinctValues[T: ClassTag](column: String): Array[T] = {
df.select(column).distinct().map(_.getAs[T](column)).collect()
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
val ageArray: Array[Int] = df.distinctValues("age")
or
val ageArray = df.distinctValues[Int]("age")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4466 次 |
最近记录: |