【发布时间】:2018-11-27 14:48:02
【问题描述】:
df1.printSchema() 打印出列名和它们拥有的数据类型。
df1.drop($"colName") 将按名称删除列。
有没有办法让这个命令改为按数据类型删除?
【问题讨论】:
标签: scala apache-spark
df1.printSchema() 打印出列名和它们拥有的数据类型。
df1.drop($"colName") 将按名称删除列。
有没有办法让这个命令改为按数据类型删除?
【问题讨论】:
标签: scala apache-spark
如果您希望根据类型删除数据框中的特定列,那么下面的 sn-p 会有所帮助。在此示例中,我有一个数据框,其中分别包含两列 String 和 Int 类型。我正在根据其类型从架构中删除我的字符串(所有类型为 String 的字段都将被删除)字段。
import sqlContext.implicits._
val df = sc.parallelize(('a' to 'l').map(_.toString) zip (1 to 10)).toDF("c1","c2")
df.schema.fields
.collect({case x if x.dataType.typeName == "string" => x.name})
.foldLeft(df)({case(dframe,field) => dframe.drop(field)})
newDf 的架构是org.apache.spark.sql.DataFrame = [c2: int]
【讨论】:
这是 scala 中的一种奇特方式:
var categoricalFeatColNames = df.schema.fields filter { _.dataType.isInstanceOf[org.apache.spark.sql.types.StringType] } map { _.name }
【讨论】: