2017-09-08 68 views
0

我有一个数据帧(DF)与3列(COL1字符串,COL2 INT,COL3字符串),但数以百万计的记录:PartitionBy去除特殊字符如下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) 

请让我知道如果我有困惑,需要更多的细节。我正在使用Spark 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 funtion:

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