2016-05-14 11 views
-1

私はcddをpythonを使ってrdd(SPARK)に読み込もうとしています。私が持っている問題は、コンマを区切り文字として使用して分割関数を使用することです。これは、各列にカンマがない限り正常に動作します。コンマがある場合、コンマは各列を複数の列に分割します。sc.textFile(APACHE SPARK RDD)を使用して読み込み中にカンマをエスケープする

EMPID、EMPタイトル、EMPのDESC、大学 123、現像剤、現像剤の役割は、C++などのC、などの言語を使用してソフトウェアを開発することで、上記の例のEMP DESCを

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

をcollege1大学にも分かれていますが、データセットを読みながら各列のカンマを処理する方法を教えてください。

答えて

0

カンマが区切り文字であるとわかっていて、追加の情報がないわけではありません。おそらく、デリミタを変更するか、デリミタ以外のコンマが入力時に何らかの形で「エスケープ」されるようにすることが最善の策です。エスケープを使用して

ソリューション:すべての非区切りカンマが「\」例えば、何かが付いているあなたは、カンマで分割し、

\エスケープで始まる任意のエントリに参加できることを提供

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) 

出力:

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

追加の情報を使用して

ソリューション:一方

、あなたは非区切りカンマのためのいくつかの理由のためのエスケープを使用できない場合は、あなたの次の最良の選択は、追加情報を課すことです。

temp = line.strip().split(",") 
empid = temp[0] 
emp_title = temp[1] 
emp_desc = temp[2:len(temp)-1] 
college = temp[-1] 
:あなたが唯一の emp_desc変数が非区切りカンマを持っていることを合理的に確信している場合たとえば、あなたは、常にこのような何かを行うことができます
関連する問題