Python(pyspark)Error = ValueError:无法将字符串转换为float:" 17"

时间:2016-03-20 11:51:38

标签: python apache-spark type-conversion bigdata

我在Spark上使用Python并从.csv文件中读取我的数据集,该文件的第一行是:

17  0.2  7
17  0.2  7
39  1.3  7
19   1   7
19   0   7

当我从文件中逐行读取以下代码时:

# Load and parse the data
def parsePoint(line):
   values = [float(x) for x in line.replace(',', ' ').split(' ')]
   return LabeledPoint(values[0], values[1:])

我收到了这个错误:

Traceback (most recent call last):
  File "<stdin>", line 3, in parsePoint
ValueError: could not convert string to float: "17"

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

根据以下评论回答此问题,您应该使用:

[float(x.strip(' "')) for x in line.split(',')]

您无需将','替换为' ',只需在split,,然后删除前导和尾随空格和引号(x.strip(' "') )在转换为float之前。

另外,请查看可能简化您工作的csv软件包。

以下是原始问题的答案(在评论之前)。

您需要使用.split()代替.split(' ')。您的行中有多个连续的空格字符,因此在' '上拆分会导致空字符串,例如你的第一行分为:

['17', '', '0.2', '', '7']

问题是那些你(显然)无法转换为float的空字符串。

使用split()可以解决问题,因为split参数为sep None(或不存在)时>>> sp5 = ' ' * 5 >>> sp5.split() [] >>> sp5.split(' ') ['', '', '', '', '', ''] 的行为:

  

如果可选的第二个参数sep不存在或为None,则单词由空格字符的任意字符串(空格,制表符,换行符,返回,换页)分隔。

请参阅split的文档,以及一个了解差异的小例子:

$dataTable = array();
$dataTable['cols'] = array(
    array('id' => 'time_axis', 'label' => 'Time', 'type' => 'datetime')
);
foreach($sensors as $id => $description) {
//Entries in $sensors are from a database
    $column = array('id' => $id, 'label' => $description, 'type' => 'number');
    array_push($dataTable['cols'],$column);
}