2017-04-12 4 views
0

をエンコードすることはできません私はpysparkを使用してツイートのデータセットからURLを削除しようとしているが、私は次のエラーを取得しています:ツイートからURLを削除 - UnicodeEncodeErrorを:「ASCII」コーデックは、文字

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe3' in position 58: ordinal not in range(128)

インポートつぶやきからURLを削除

tweetImport=spark.read.format('com.databricks.spark.csv')\ 
        .option('delimiter', ';')\ 
        .option('header', 'true')\ 
        .option('charset', 'utf-8')\ 
        .load('./output_got.csv') 

すでにTR
from pyspark.sql.types import StringType 
from pyspark.sql.functions import udf 

normalizeTextUDF=udf(lambda text: re.sub(r"(\w+:\/\/\S+)", \ 
       ":url:", str(text).encode('ascii','ignore')), \   
       StringType()) 

tweetsNormalized=tweetImport.select(normalizeTextUDF(\ 
       lower(tweetImport.text)).alias('text')) 
tweetsNormalized.show() 

csvファイルからデータフレームIED:

normalizeTextUDF=udf(lambda text: re.sub(r"(\w+:\/\/\S+)", \ 
       ":url:", str(text).encode('utf-8')), \   
       StringType()) 

そして:

normalizeTextUDF=udf(lambda text: re.sub(r"(\w+:\/\/\S+)", \ 
       ":url:", unicode(str(text), 'utf-8')), \   
       StringType()) 

------------編集を動作しませんでした----------- ---

トレースバック:

Py4JJavaError: An error occurred while calling o581.showString. :org.apache.spark.SparkException: Job aborted due to stage failure: 
Task 0 in stage 10.0 failed 1 times, most recent failure: Lost task 
0.0 in stage 10.0 (TID 10, localhost, executor driver): org.apache.spark.api.python.PythonException: 
Traceback (most recent call last): 
    File "/home/flav/zeppelin-0.7.1-bin-all/interpreter/spark/pyspark/pyspark.zip/pyspark/worker.py", line 174, in main 
    process() 
    File "/home/flav/zeppelin-0.7.1-bin-all/interpreter/spark/pyspark/pyspark.zip/pyspark/worker.py", line 169, in process 
    serializer.dump_stream(func(split_index, iterator), outfile) 
    File "/home/flav/zeppelin-0.7.1-bin-all/interpreter/spark/pyspark/pyspark.zip/pyspark/worker.py", line 106, in <lambda> 
    func = lambda _, it: map(mapper, it) 
    File "/home/flav/zeppelin-0.7.1-bin-all/interpreter/spark/pyspark/pyspark.zip/pyspark/worker.py", line 92, in <lambda> 
    mapper = lambda a: udf(*a) 
    File "/home/flav/zeppelin-0.7.1-bin-all/interpreter/spark/pyspark/pyspark.zip/pyspark/worker.py", line 70, in <lambda> 
    return lambda *a: f(*a) 
    File "<stdin>", line 3, in <lambda> 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe3' in position 58: ordinal not in range(128) 
+1

我々が必要となりますこれは例外を投げた行と、Pythonがどうやってそこに到達したかを示しているからです。 –

+0

元の投稿にトレースバックが追加されました^。〜 –

+0

残念ながらあまり明確ではありません。 Pyspark自体で例外が発生したか、またはPysparkが実際の例外トレースバックを隠してしまったかのいずれかです。 –

答えて

1

を:

import string 
import unicodedata 
from pyspark.sql.functions import * 

def normalizeData(text): 
    replace_punctuation = string.maketrans(string.punctuation, ' '*len(string.punctuation)) 
    nfkd_form=unicodedata.normalize('NFKD', unicode(text)) 
    dataContent=nfkd_form.encode('ASCII', 'ignore').translate(replace_punctuation) 
    dataContentSingleLine=' '.join(dataContent.split()) 

return dataContentSingleLine 

udfNormalizeData=udf(lambda text: normalizeData(text)) 
tweetsNorm=tweetImport.select(tweetImport.date,udfNormalizeData(lower(tweetImport.text)).alias('text')) 
0

最初のテキストをデコードしてみてください。

その後、エンコード実行し
str(text).decode('utf-8-sig') 

:私は次の関数を使用して、最初のponctuationを除去することによって、私は必要なものを行う方法を考え出し

str(text).encode('utf-8') 
関連する問題