我尝试对不同的列执行onehotencoder,例如以下代码。列是保存列索引的列表。方法updateCode(x, dict_label2code, column+offSet)
用于用代码替换类别。新的RDD中的行长度增加了,因为代码长度必须大于1。
列中的第一列可以成功编码。但是,运行到第二次for循环时,'print rdd.take(2)'
会出错。
欢迎提出任何建议。
def replaceNull(x):
if x == '':
x='none_value'
return x
def scOneHotEncoder(rdd, columns):
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder
offset = 0
values = rdd.map(lambda x:x[column+offSet]).map(lambda x:replaceNull(x)).distinct().collect()
for column in columns:
print rdd.take(2) # for testing.
#
# There are many codes here to get the dict_label2code which is a dict type, the key is the category of column+offset, and the value is the code.
#
rdd = rdd.map(lambda x:updateCode(x, dict_label2code, column+offSet))
print rdd.take(5) # for testing.
offSet = offSet + len(values) - 1
return rdd