我有一个Python代码工作正常,但是当我尝试在SPARK中使用相同的代码时,它会为FIT方法提供以下错误:
TypeError: float() argument must be a string or a number
示例数据:
col1 col2 col3 col4 col5 col6
0 35 78 11 78 81 0
1 30 44 13 17 51 0
2 36 73 74 74 62 0
3 60 86 11 97 24 1
Python代码(工作):
# load data
data = read_csv('train.csv', names=['col1', 'col2', 'col3', 'col4', 'col5', 'col6'])
array = data.values
X = array[:,0:5]
Y = array[:,5]
SPARK代码:
raw_data = train
raw_data_header = raw_data.take(1)[0]
data = raw_data.filter(lambda line: line!=raw_data_header)\
.map(lambda line: line.split(",")).map(lambda tokens: (int(tokens[0]),int(tokens[1]),int(tokens[2]),int(tokens[3]),int(tokens[4]))).cache()
result = raw_data.filter(lambda line: line!=raw_data_header)\
.map(lambda line: line.split(",")).map(lambda tokens: (int(tokens[5]))).cache()
data1 = data.map( lambda elem: list(elem))
result1 = result.map( lambda elem: list(elem))
X = data1
Y = result
当我试图适应模型时,错误出现在最后一行:
model = LogisticRegression()
rfe = RFE(model, 5)
fit = rfe.fit(X, Y)
P.S .: 我不得不将数据和结果转换为data1和result1,因为在Spark中RDD不可迭代,我们需要数据作为列表列表(而不是元组列表)
任何其他达到相同目的的方法也是可以接受的。