свечи выберите столбцы по типу - PullRequest
0 голосов
/ 20 февраля 2019

Я хочу иметь функцию для динамического выбора столбцов искровых Dataframe по их типу данных.

До сих пор я создал:

object StructTypeHelpers {
  def selectColumnsByType[T <: DataType](schem: StructType):Seq[String] = {
    schem.filter(_.dataType.isInstanceOf[T]).map(_.name)
  }

}

, чтобы StructTypeHelpers. selectColumnsByType[StringType](df.schema) работал.Тем не менее, компилятор предупреждает меня, что:

abstract type T is unchecked since it is eliminated by erasure

При попытке использовать:

import scala.reflect.ClassTag
def selectColumnsByType[T <: DataType: ClassTag](schem: StructType):Seq[String]

происходит сбой с

No ClassTag available for T

Как мне егоработать и компилировать без предупреждения?

1 Ответ

0 голосов
/ 20 февраля 2019

Идея состоит в том, чтобы отфильтровать только те столбцы, которые имеют требуемый тип, а затем выбрать.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...