2016-05-14 7 views
-1

Ich versuche, eine CSV zu einem RDD (SPARK) mit Python zu lesen. Das Problem, das ich habe, ist während der Verwendung der Split-Funktion mit Komma als Trennzeichen. Dies funktioniert, solange in jeder Spalte kein Komma vorhanden ist. Wenn Kommas vorhanden sind, teilt das Komma jede Spalte in mehrere Spalten auf.Escape-Komma beim Lesen mit sc.textFile (APACHE SPARK RDD)

z.B.

empid, emp Titel, emp ab, uni 123, Entwickler, die Rolle des Entwicklers Software mit Sprachen wie C zu entwickeln, C++ usw., college1

data = sc.textfile("files.csv") 
empid, emp title, emp desc, college = line.strip().split(",") 

in dem obigen Beispiel der emp ab ist auch auf die Hochschule verteilt, bitte lassen Sie mich wissen, wie man mit Kommas in jeder Spalte umgehen, während Sie den Datensatz lesen?

Antwort

0

Es ist nicht wirklich möglich zu wissen, welche Kommas Trennzeichen sein sollen und welche nicht ohne zusätzliche Informationen sind. Ihre beste Wette wäre wahrscheinlich, nur das Trennzeichen zu ändern oder sicherzustellen, dass alle Nicht-Trennzeichen-Kommas in irgendeiner Weise bei der Eingabe "geflüchtet" sind.

Lösung eine Flucht mit:

Sofern alle Nicht-Trennzeichen Kommas sind mit dem Präfix etwas, zum Beispiel „\“, dann können Sie einen beliebigen Eintrag durch Komma und kommen aufgeteilt, die \

mit der Flucht beginnt
line = '123, developer, the role of developer is to develop softwares using languages such as C\\, C++ etc, college1' 

temp = line.strip().split(',') 

i=0 
while i < len(temp)-1: 
    if temp[i][-1] == '\\': 
     temp[i:i+2] = [','.join(temp[i:i+2])] 
    else: 
     temp[i] = ','.join(temp[i].split('\\,')) 
     i += 1 

empid, emp_title, emp_desc, college = temp 
print('empid: '+empid+'\nemp_title: '+emp_title+'\nemp_desc: '+emp_desc+'\ncollege: '+college) 

output:

empid: 123 
emp_title: developer 
emp_desc: the role of developer is to develop softwares using languages such as C, C++ etc 
college: college1 

Lösung zusätzliche Informationen mit:

Auf der anderen Seite, wenn Sie nicht eine Flucht aus irgendeinem Grunde für nicht-Trennzeichen Kommas dann ist Ihre nächste beste Wahl zusätzliche Informationen verhängen können. Wenn Sie zum Beispiel sind recht zuversichtlich, dass nur die emp_desc Variable nicht-Trennzeichen Komma haben dann könnte man immer etwas tun:

temp = line.strip().split(",") 
empid = temp[0] 
emp_title = temp[1] 
emp_desc = temp[2:len(temp)-1] 
college = temp[-1]