2017-03-11 77 views
0

这里是一块数据集:努力理解为什么浮子()是给这个错误

18,8,307,130,3504,12,70,1,chevrolet 
15,8,350,165,3693,11.5,70,1,buick 
18,8,318,150,3436,11,70,1,plymouth 
16,8,304,150,3433,12,70,1,amc 
17,8,302,140,3449,10.5,70,1,ford 
15,8,429,198,4341,10,70,1,ford 
14,8,454,220,4354,9,70,1,chevrolet 
14,8,440,215,4312,8.5,70,1,plymouth 

这里是代码:

data = sc.textFile("hw6/auto_mpg_original.csv") 
records = data.map(lambda x: x.split(",")) 

hp = float(records.map(lambda x: x[3])) 
disp = np.array(float(records.map(lambda x: x[2]))) 

final_data_1 = LabeledPoint(hp, disp) 

这里是错误:

Traceback (most recent call last): 
    File "/home/cloudera/Desktop/hw6.py", line 41, in <module> 
    hp = float(records.map(lambda x: x[3])) 
TypeError: float() argument must be a string or a number 

这似乎很基本,但我真的很难追踪到这个解决方案。

回答

1

检查的records.map()可能是一个RDD类型。您可以将float()map(),如:

hp = records.map(lambda x: float(x[3])) 

但你需要.collect()使用它之前的结果,例如:

hp = records.map(lambda x: float(x[3])).collect() 
disp = np.array(records.map(lambda x: float(x[2])).collect()) 
+0

我在做出这些更改后出现同样的错误。 – madsthaks

+0

奇怪,所以我将LabeledPoint行注释掉,然后代码运行良好。这个功能真的会引起我的问​​题。我遇到麻烦,理解它为什么有效并且没有。 – madsthaks

+0

如果在同一行上出现相同的错误,我会感到惊讶,因为任何火花错误都会非常不同,并且将float()移动到地图中会导致火花错误。 – AChampion

0

没有与从CSV输入的问题,列为空或者包含非数值

+0

作为RDD,他们进来的字符串但这就是为什么我要将它们转换成花车。所有的值都是数字,但我已经上传了一块数据集 – madsthaks

+0

您需要检查整个数据集,而不仅仅是它的一部分。有一些脏的值导致这个错误 – Sarvex

+0

你不能'float()',没有错误的数据集。 – AChampion