2017-09-08 1 views
0

Ich habe einen Datenrahmen (df) mit 3 Spalten (col1 string, col2 int, col3 string) wie unten aber Millionen von Datensätzen:PartitionBy entfernt Sonderzeichen in PySpark

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

Wenn ich versuche, partitionBy zu tun Wenn Sie PySpark verwenden, um die Daten mit der folgenden Anweisung zu schreiben, gehen die Sonderzeichen im Col1 verloren und werden beim Erstellen von Verzeichnissen in hdfs durch ASCII-Zeichen ersetzt. Gibt es eine Möglichkeit, dass die Sonderzeichen beibehalten und in den Verzeichnispfad aufgenommen werden, während dieser Datenrahmen in hdfs geschrieben wird?

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

Bitte lassen Sie mich wissen, wenn ich verwirrt habe und weitere Details benötigen. Ich verwende Spark 1.6.1

Antwort

0

Es wird nicht empfohlen, Sonderzeichen im Dateipfad zu haben. Einige der Sonderzeichen werden nicht durch die URIpath in hadoop Schale unterstützt wird, ist es empfehlenswert, nur Zeichen zu verwenden, die in JAVAURI genannt: http://docs.oracle.com/javase/7/docs/api/java/net/URI.html

Ein Zeichen codiert wird, indem sie mit der Sequenz entwichener octets ersetzen, die darstellen, dass Zeichen im UTF-8-Zeichensatz: ' wird durch %27 und # durch %23 ersetzt.

Wenn Sie aus den Dateinamen lesen möchten die ursprüngliche Zeichenfolge verwenden, verwenden Sie nur quote funtion des urllib:

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 
Verwandte Themen