【发布时间】:2017-09-26 22:30:27
【问题描述】:
考虑以下 spark 数据框:
df.printSchema()
|-- predictor: double (nullable = true)
|-- label: double (nullable = true)
|-- date: string (nullable = true)
df.show(6)
predictor label date
4.23 6.33 20160510
4.77 7.18 20160510
4.09 5.94 20160511
4.23 6.33 20160511
4.77 7.18 20160512
4.09 5.94 20160512
基本上,我的数据框由每日频率的数据组成。我需要将日期列映射到二进制向量列。这很容易使用 StringIndexer 和 OneHotEncoder 实现:
val dateIndexer = new StringIndexer()
.setInputCol("date")
.setOutputCol("dateIndex")
.fit(df)
val indexed = dateIndexer.transform(df)
val encoder = new OneHotEncoder()
.setInputCol("dateIndex")
.setOutputCol("date_codeVec")
val encoded = encoder.transform(indexed)
我的问题是OneHotEncoder drops the last category by default。但是,我需要删除与数据框中第一个日期相关的类别(上例中为 20160510),因为我需要计算相对于第一个日期的时间趋势。
对于上述示例,我如何才能实现这一点(请注意,我的数据框中有 100 多个日期)?
【问题讨论】:
标签: scala apache-spark one-hot-encoding