2017-09-08 11 views
0

に特殊文字が削除されますが、レコードの数百万人:PartitionByは、私は以下のように3列(COL1文字列、col2にint型、col3という文字列)を持つデータフレーム(DF)を持っているPySpark

Test's 123 abcdefgh 
Tes#t 456 mnopqrst 
Test's 789 hdskfdss 

私はpartitionByを実行しようとしていた場合PySparkを使用して以下のステートメントでデータを書き込むと、Col1の特殊文字が失われ、hdfsにディレクトリを作成するときにascii文字に置き換えられます。このデータフレームをhdfsに書き込む際に、特殊文字が保持され、ディレクトリパスに含まれるような方法はありますか?

df.write.partitionBy("col1","col2").text(hdfs_path) 

私は混乱しており、詳細が必要な場合は教えてください。私はスパーク1.6.1を使用しています

答えて

0

ファイルのパスに特殊文字を含めることはお勧めしません。特殊文字のいくつかのHadoopシェルでURIpathによってサポートされていない、JAVAURIに記載されている文字だけを使用することをお勧めします。 http://docs.oracle.com/javase/7/docs/api/java/net/URI.html

文字があることを表すエスケープオクテットのシーケンスでそれを置き換えることにより、符号化されていますUTF-8文字セットの文字:'は、%27#%23で置き換えられます。

あなたは元の文字列を使用して、ファイル名から読みたい場合は、単にurllibはのquote目的球を使用:

import urllib 

file_name = "Tes#t" 
url_file_name = urllib.parse.quote(file_name) 
print (url_file_name) 
print (urllib.parse.unquote(url_file_name)) 

    Tes%23t 
    Tes#t 
関連する問題