2016-03-20 17 views
1

Ben Spark üzerinde Python ile çalışan ve kimin .csv dosyasından benim veri kümesi okuyorum ilk birkaç satır şunlardır:Python (pyspark) Hata = ValueError: dizeyi dönüştürmek olamazdı yüzer: "17"

17 0.2 7 
17 0.2 7 
39 1.3 7 
19 1 7 
19 0 7 
aşağıda koduyla çizgi ile dosya hattından okuduğumda

:

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

Herhangi hel:

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

bu hatayı alıyorum p büyük beğeni topluyor. Bu yanıt Aşağıdaki yorumlardan ardından

+2

('|') | '', değil '.split (' ')' – zondo

+0

o koymak' Soruları gönderirken, hücrelerin sınırlarını netleştirmek için karakterler. Gerçek dosyada yoklar. –

+1

Ah, beyaz boşluk bunu yapmalı. Sadece metni tam olarak dosyada nasıl olduğu sorusuna koy. – zondo

cevap

0

, kullanmak gerekir:

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

Sen ' ' ile ',' yerine gerekmez, daha sonra basitçe , üzerinde split ve lider ve beyaz boşlukları ve tırnak sondaki çıkarın (x.strip(' "')) should float'a dönüştürmeden önce.

Ayrıca, işinizi kolaylaştırabilecek csv paketlerine de bakın.


Aşağıda (yorumlar öncesi) asıl soruya cevaptır.

.split(' ') yerine .split() kullanmanız gerekir. Satırınızda birden çok ardışık boşluk karakteriniz var, bu nedenle ' ' numaralı bölüme ayırma, boş dizeler, ör.

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

sorun (elbette) float dönüştürmek olamaz o boş dizeleri şunlardır: içine ilk satır ayrılmıştır.

onun sep argüman None olduğunda split davranışına sorunu sayesinde çözecek split() kullanılarak (veya mevcut değildir):

If the optional second argument sep is absent or None, the words are separated by arbitrary strings of whitespace characters (space, tab, newline, return, formfeed).

split ait doküman, ve farkı anlamak için küçük bir örneği aşağıda verilmiştir:

>>> sp5 = ' ' * 5 
>>> sp5.split() 
[] 
>>> sp5.split(' ') 
['', '', '', '', '', ''] 
Sen `.split kullanarak olmalıdır
+0

Tam olarak söylediğin gibi denedim. Şimdi, aynı hata 35. 'Traceback (en son çağrı son): dosya" ", satır 3, parsePoint ValueError: başka bir değer hakkında şikayet dışında aynı hata:" 35 " ' –

+0

@EmreBulut Bu '35'in olduğu çizgiyi gösterebilir misiniz? – Holt

+0

Dosyada 1 milyondan fazla satır var.Hangi 35 hakkında şikayet edeceğini bilmiyorum .. Dosyayı şu anda bir metin editörüyle açtım: "35", "1.3", "7" "29", "1", "7" "24", "1.2", "7" "24", "1.1", "7" "19", "0", "7" "36", "0", "7" "19", "1.2", "7" "24", "1.3", "7" –